• Tom Bergan's avatar
    http2: block RoundTrip when the Transport hits MaxConcurrentStreams · 1c05540f
    Tom Bergan authored
    Currently if the http2.Transport hits SettingsMaxConcurrentStreams for a
    server, it just makes a new TCP connection and creates the stream on the
    new connection. This CL updates that behavior to instead block RoundTrip
    until a new stream is available.
    
    I also fixed a second bug, which was necessary to make some tests pass:
    Previously, a stream was removed from cc.streams only if either (a) we
    received END_STREAM from the server, or (b) we received RST_STREAM from
    the server. This CL removes a stream from cc.streams if the request was
    cancelled (via ctx.Close, req.Cancel, or resp.Body.Close) before
    receiving END_STREAM or RST_STREAM from the server.
    
    Updates golang/go#13774
    Updates golang/go#20985
    Updates golang/go#21229
    
    Change-Id: I660ffd724c4c513e0f1cc587b404bedb8aff80be
    Reviewed-on: https://go-review.googlesource.com/53250
    Run-TryBot: Tom Bergan <tombergan@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    1c05540f
transport.go 60.6 KB