Skip to content

Commit d2e9a4e

Browse files
fraenkelcagedmantis
authored andcommitted
[internal-branch.go1.16-vendor] http2: complete outstanding async write before reading the next frame
Updates golang/go#42777 Fixes golang/go#47691 Change-Id: I8d7e35ded3fe508f6c285e84ba768104c3406bdf Reviewed-on: https://go-review.googlesource.com/c/net/+/330909 Reviewed-by: Brad Fitzpatrick <[email protected]> Reviewed-by: Damien Neil <[email protected]> Trust: Dmitri Shuralyov <[email protected]> (cherry picked from commit 60bc85c) Reviewed-on: https://go-review.googlesource.com/c/net/+/346889 Trust: Damien Neil <[email protected]> Run-TryBot: Damien Neil <[email protected]> TryBot-Result: Go Bot <[email protected]> Reviewed-by: Cherry Mui <[email protected]>
1 parent 6f52993 commit d2e9a4e

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

http2/server.go

+9
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,15 @@ func (sc *serverConn) serve() {
866866
case res := <-sc.wroteFrameCh:
867867
sc.wroteFrame(res)
868868
case res := <-sc.readFrameCh:
869+
// Process any written frames before reading new frames from the client since a
870+
// written frame could have triggered a new stream to be started.
871+
if sc.writingFrameAsync {
872+
select {
873+
case wroteRes := <-sc.wroteFrameCh:
874+
sc.wroteFrame(wroteRes)
875+
default:
876+
}
877+
}
869878
if !sc.processFrameFromReader(res) {
870879
return
871880
}

0 commit comments

Comments
 (0)