]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: update bundled http2
authorAndrew Gerrand <adg@golang.org>
Wed, 8 Jun 2016 02:57:00 +0000 (12:57 +1000)
committerAndrew Gerrand <adg@golang.org>
Wed, 8 Jun 2016 04:34:30 +0000 (04:34 +0000)
Updates x/net/http2 to git rev 313cf39 for CLs 23812 and 23880:

http2: GotFirstResponseByte hook should only fire once
http2: fix data race on pipe

Fixes #16000

Change-Id: I9c3f1b2528bbd99968aa5a0529ae9c5295979d1d
Reviewed-on: https://go-review.googlesource.com/23881
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
src/net/http/h2_bundle.go

index 597eb7de472796f1feadf3a90a40bb65c80f18bc..a7ab691f6a6cf05e85c3a4eb9b165902fc44c1d0 100644 (file)
@@ -2631,6 +2631,12 @@ type http2pipeBuffer interface {
        io.Reader
 }
 
+func (p *http2pipe) 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 *http2pipe) Read(d []byte) (n int, err error) {
@@ -6152,8 +6158,10 @@ func (b http2transportResponseBody) Read(p []byte) (n int, err error) {
                cc.inflow.add(connAdd)
        }
        if err == nil {
-               if v := cs.inflow.available(); v < http2transportDefaultStreamFlow-http2transportDefaultStreamMinRefresh {
-                       streamAdd = http2transportDefaultStreamFlow - v
+
+               v := int(cs.inflow.available()) + cs.bufPipe.Len()
+               if v < http2transportDefaultStreamFlow-http2transportDefaultStreamMinRefresh {
+                       streamAdd = int32(http2transportDefaultStreamFlow - v)
                        cs.inflow.add(streamAdd)
                }
        }