mirror of
https://github.com/golang/net.git
synced 2026-03-31 10:27:08 +09:00
http2: fix data race on pipe
Fixes golang/go#15999. Change-Id: I20793ce717c768557c4942ff6be4e77c23ab201c Reviewed-on: https://go-review.googlesource.com/23880 Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Gerrand <adg@golang.org>
This commit is contained in:
committed by
Andrew Gerrand
parent
154d9f9ea8
commit
313cf39d4a
@@ -29,6 +29,12 @@ type pipeBuffer interface {
|
||||
io.Reader
|
||||
}
|
||||
|
||||
func (p *pipe) Len() int {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
return p.b.Len()
|
||||
}
|
||||
|
||||
// Read waits until data is available and copies bytes
|
||||
// from the buffer into p.
|
||||
func (p *pipe) Read(d []byte) (n int, err error) {
|
||||
|
||||
@@ -1462,7 +1462,7 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) {
|
||||
// Consider any buffered body data (read from the conn but not
|
||||
// consumed by the client) when computing flow control for this
|
||||
// stream.
|
||||
v := int(cs.inflow.available()) + cs.bufPipe.b.Len()
|
||||
v := int(cs.inflow.available()) + cs.bufPipe.Len()
|
||||
if v < transportDefaultStreamFlow-transportDefaultStreamMinRefresh {
|
||||
streamAdd = int32(transportDefaultStreamFlow - v)
|
||||
cs.inflow.add(streamAdd)
|
||||
|
||||
Reference in New Issue
Block a user