浏览代码

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