Explorar o código

conn: close timeout chan before relesing stream to prevent race

Chris Bannister %!s(int64=7) %!d(string=hai) anos
pai
achega
95711e6c48
Modificáronse 1 ficheiros con 2 adicións e 2 borrados
  1. 2 2
      conn.go

+ 2 - 2
conn.go

@@ -711,13 +711,13 @@ func (c *Conn) sendFrame(ctx context.Context, call *callReq, timeoutCh <-chan ti
 	case c.frameWriteArgChan <- call:
 		return nil
 	case <-timeoutCh:
-		c.releaseStream(call.streamID)
 		close(call.timeout)
+		c.releaseStream(call.streamID)
 		c.handleTimeout()
 		return ErrTimeoutNoResponse
 	case <-ctxDone:
-		c.releaseStream(call.streamID)
 		close(call.timeout)
+		c.releaseStream(call.streamID)
 		return ctx.Err()
 	case <-c.quit:
 		return ErrConnectionClosed