소스 검색

conn: close timeout chan before relesing stream to prevent race

Chris Bannister 7 년 전
부모
커밋
95711e6c48
1개의 변경된 파일2개의 추가작업 그리고 2개의 파일을 삭제
  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