From 7cc213310c4952c13ffdb2e25541f368ddbb69df Mon Sep 17 00:00:00 2001 From: Can Guler Date: Mon, 19 Aug 2019 10:04:28 -0700 Subject: [PATCH] internal: fix context leak when stream is not created successfully #2985 --- internal/transport/http2_server.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/transport/http2_server.go b/internal/transport/http2_server.go index 83439b5627d9..2f603c1d9e94 100644 --- a/internal/transport/http2_server.go +++ b/internal/transport/http2_server.go @@ -359,12 +359,14 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( rstCode: http2.ErrCodeRefusedStream, onWrite: func() {}, }) + s.cancel() return false } } t.mu.Lock() if t.state != reachable { t.mu.Unlock() + s.cancel() return false } if uint32(len(t.activeStreams)) >= t.maxStreams { @@ -375,12 +377,14 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( rstCode: http2.ErrCodeRefusedStream, onWrite: func() {}, }) + s.cancel() return false } if streamID%2 != 1 || streamID <= t.maxStreamID { t.mu.Unlock() // illegal gRPC stream id. errorf("transport: http2Server.HandleStreams received an illegal stream id: %v", streamID) + s.cancel() return true } t.maxStreamID = streamID