[release-branch.go1.15] net/http: update bundled x/net/http2

Updates bundled http2 to x/net git rev 16c2bbf55 for:

	http2: send a nil error if we cancel a delayed body write
	https://golang.org/cl/288013

	http2: wait until the request body has been written
	https://golang.org/cl/288012

Created by:

go mod edit -replace=golang.org/x/net=golang.org/x/net@release-branch.go1.15-bundle
GOFLAGS='-mod=mod' go generate -run=bundle std
go mod edit -dropreplace=golang.org/x/net
go get -d golang.org/x/net@release-branch.go1.15
go mod tidy
go mod vendor

Fixes golang/go#42539

Change-Id: I299c6d4a67ebc036e45c978e4d03cba73717b363
Reviewed-on: https://go-review.googlesource.com/c/go/+/288112
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
This commit is contained in:
Damien Neil 2021-01-29 11:01:37 -08:00 committed by Dmitri Shuralyov
parent 9bb97ea047
commit a01db0df00
1 changed files with 10 additions and 2 deletions

View File

@ -7592,6 +7592,9 @@ func (cc *http2ClientConn) roundTrip(req *Request) (res *Response, gotErrAfterRe
// we can keep it. // we can keep it.
bodyWriter.cancel() bodyWriter.cancel()
cs.abortRequestBodyWrite(http2errStopReqBodyWrite) cs.abortRequestBodyWrite(http2errStopReqBodyWrite)
if hasBody && !bodyWritten {
<-bodyWriter.resc
}
} }
if re.err != nil { if re.err != nil {
cc.forgetStreamID(cs.ID) cc.forgetStreamID(cs.ID)
@ -7612,6 +7615,7 @@ func (cc *http2ClientConn) roundTrip(req *Request) (res *Response, gotErrAfterRe
} else { } else {
bodyWriter.cancel() bodyWriter.cancel()
cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel) cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel)
<-bodyWriter.resc
} }
cc.forgetStreamID(cs.ID) cc.forgetStreamID(cs.ID)
return nil, cs.getStartedWrite(), http2errTimeout return nil, cs.getStartedWrite(), http2errTimeout
@ -7621,6 +7625,7 @@ func (cc *http2ClientConn) roundTrip(req *Request) (res *Response, gotErrAfterRe
} else { } else {
bodyWriter.cancel() bodyWriter.cancel()
cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel) cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel)
<-bodyWriter.resc
} }
cc.forgetStreamID(cs.ID) cc.forgetStreamID(cs.ID)
return nil, cs.getStartedWrite(), ctx.Err() return nil, cs.getStartedWrite(), ctx.Err()
@ -7630,6 +7635,7 @@ func (cc *http2ClientConn) roundTrip(req *Request) (res *Response, gotErrAfterRe
} else { } else {
bodyWriter.cancel() bodyWriter.cancel()
cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel) cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel)
<-bodyWriter.resc
} }
cc.forgetStreamID(cs.ID) cc.forgetStreamID(cs.ID)
return nil, cs.getStartedWrite(), http2errRequestCanceled return nil, cs.getStartedWrite(), http2errRequestCanceled
@ -7639,6 +7645,7 @@ func (cc *http2ClientConn) roundTrip(req *Request) (res *Response, gotErrAfterRe
// forgetStreamID. // forgetStreamID.
return nil, cs.getStartedWrite(), cs.resetErr return nil, cs.getStartedWrite(), cs.resetErr
case err := <-bodyWriter.resc: case err := <-bodyWriter.resc:
bodyWritten = true
// Prefer the read loop's response, if available. Issue 16102. // Prefer the read loop's response, if available. Issue 16102.
select { select {
case re := <-readLoopResCh: case re := <-readLoopResCh:
@ -7649,7 +7656,6 @@ func (cc *http2ClientConn) roundTrip(req *Request) (res *Response, gotErrAfterRe
cc.forgetStreamID(cs.ID) cc.forgetStreamID(cs.ID)
return nil, cs.getStartedWrite(), err return nil, cs.getStartedWrite(), err
} }
bodyWritten = true
if d := cc.responseHeaderTimeout(); d != 0 { if d := cc.responseHeaderTimeout(); d != 0 {
timer := time.NewTimer(d) timer := time.NewTimer(d)
defer timer.Stop() defer timer.Stop()
@ -9060,7 +9066,9 @@ func (t *http2Transport) getBodyWriterState(cs *http2clientStream, body io.Reade
func (s http2bodyWriterState) cancel() { func (s http2bodyWriterState) cancel() {
if s.timer != nil { if s.timer != nil {
s.timer.Stop() if s.timer.Stop() {
s.resc <- nil
}
} }
} }