Skip to content

Commit 6d2eada

Browse files
fraenkelcagedmantis
authored andcommitted
[internal-branch.go1.17-vendor] http2: complete outstanding async write before reading the next frame
Updates golang/go#42777 Fixes golang/go#47692 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/+/346890 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 4163338 commit 6d2eada

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

http2/server.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,15 @@ func (sc *serverConn) serve() {
860860
case res := <-sc.wroteFrameCh:
861861
sc.wroteFrame(res)
862862
case res := <-sc.readFrameCh:
863+
// Process any written frames before reading new frames from the client since a
864+
// written frame could have triggered a new stream to be started.
865+
if sc.writingFrameAsync {
866+
select {
867+
case wroteRes := <-sc.wroteFrameCh:
868+
sc.wroteFrame(wroteRes)
869+
default:
870+
}
871+
}
863872
if !sc.processFrameFromReader(res) {
864873
return
865874
}

0 commit comments

Comments
 (0)