http2: don't abort half-closed streams on server connection close If the server sends an END_STREAM for a stream and then closes the connection, allow the stream to complete normally. Fixes golang/go#48995 Change-Id: Ia876e6e6e7eb4a0563db74c931c03a44620ece08 Reviewed-on: https://go-review.googlesource.com/c/net/+/356030 Trust: Damien Neil <dneil@google.com> Run-TryBot: Damien Neil <dneil@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/http2/transport.go b/http2/transport.go index 9b126ea..faeea16 100644 --- a/http2/transport.go +++ b/http2/transport.go
@@ -2000,7 +2000,13 @@ } cc.closed = true for _, cs := range cc.streams { - cs.abortStreamLocked(err) + select { + case <-cs.peerClosed: + // The server closed the stream before closing the conn, + // so no need to interrupt it. + default: + cs.abortStreamLocked(err) + } } cc.cond.Broadcast() cc.mu.Unlock()