http: fix race in DATA frame padding refund
Move flow adjustment back under cc.mu.
Fixes golang/go#48491.
Change-Id: Idb762091cfeb55c18bc74389e62193f81438624f
Reviewed-on: https://go-review.googlesource.com/c/net/+/351950
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/http2/transport.go b/http2/transport.go
index dc4bdde..0ab5ad3 100644
--- a/http2/transport.go
+++ b/http2/transport.go
@@ -2371,6 +2371,9 @@
}
if refund > 0 {
cc.inflow.add(int32(refund))
+ if !didReset {
+ cs.inflow.add(int32(refund))
+ }
}
cc.mu.Unlock()
@@ -2378,7 +2381,6 @@
cc.wmu.Lock()
cc.fr.WriteWindowUpdate(0, uint32(refund))
if !didReset {
- cs.inflow.add(int32(refund))
cc.fr.WriteWindowUpdate(cs.ID, uint32(refund))
}
cc.bw.Flush()