From: Brad Fitzpatrick Date: Wed, 6 Jan 2016 19:52:51 +0000 (+0000) Subject: net/http: fix flaky TestTransportCancelBeforeResponseHeaders test X-Git-Tag: go1.6beta2~117 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fb394017f1b5081f1243688c0686ba5faca96835;p=gostls13.git net/http: fix flaky TestTransportCancelBeforeResponseHeaders test Add a couple more cases where we convert random network I/O errors into errRequestCanceled if the request was forcefully aborted. It failed ~1/1000 times without -race, or very easily with -race. (due to -race randomizing some scheduling) Fixes #11894 Change-Id: Ib1c123ce1eebdd88642da28a5948ca4f30581907 Reviewed-on: https://go-review.googlesource.com/18287 Reviewed-by: Russ Cox --- diff --git a/src/net/http/transport.go b/src/net/http/transport.go index 6ca1c5a9fd..01e3a05a3a 100644 --- a/src/net/http/transport.go +++ b/src/net/http/transport.go @@ -1423,6 +1423,9 @@ WaitResponse: select { case err := <-writeErrCh: if err != nil { + if pc.isCanceled() { + err = errRequestCanceled + } re = responseAndError{err: beforeRespHeaderError{err}} pc.close(fmt.Errorf("write error: %v", err)) break WaitResponse @@ -1446,6 +1449,9 @@ WaitResponse: re = responseAndError{err: errTimeout} break WaitResponse case re = <-resc: + if re.err != nil && pc.isCanceled() { + re.err = errRequestCanceled + } break WaitResponse case <-cancelChan: pc.t.CancelRequest(req.Request) diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go index 9b4802f2aa..46e330315b 100644 --- a/src/net/http/transport_test.go +++ b/src/net/http/transport_test.go @@ -1649,7 +1649,6 @@ func TestCancelRequestWithChannelBeforeDo(t *testing.T) { // Issue 11020. The returned error message should be errRequestCanceled func TestTransportCancelBeforeResponseHeaders(t *testing.T) { - setFlaky(t, 11894) defer afterTest(t) serverConnCh := make(chan net.Conn, 1)