From 054d03a130cd953f0f9f46860e5f5a1b7e519d0e Mon Sep 17 00:00:00 2001 From: iamqizhao Date: Thu, 29 Oct 2015 10:55:53 -0700 Subject: [PATCH] put ctx cancel into the right place --- transport/http2_client.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/transport/http2_client.go b/transport/http2_client.go index 882a9bb2..b13fb78c 100644 --- a/transport/http2_client.go +++ b/transport/http2_client.go @@ -383,6 +383,11 @@ func (t *http2Client) CloseStream(s *Stream, err error) { if updateStreams { t.streamsQuota.add(1) } + // In case stream sending and receiving are invoked in separate + // goroutines (e.g., bi-directional streaming), the caller needs + // to call cancel on the stream to interrupt the blocking on + // other goroutines. + s.cancel() s.mu.Lock() if q := s.fc.restoreConn(); q > 0 { t.controlBuf.put(&windowUpdate{0, q}) @@ -397,11 +402,6 @@ func (t *http2Client) CloseStream(s *Stream, err error) { } s.state = streamDone s.mu.Unlock() - // In case stream sending and receiving are invoked in separate - // goroutines (e.g., bi-directional streaming), the caller needs - // to call cancel on the stream to interrupt the blocking on - // other goroutines. - s.cancel() if _, ok := err.(StreamError); ok { t.controlBuf.put(&resetStream{s.id, http2.ErrCodeCancel}) }