From fb394017f1b5081f1243688c0686ba5faca96835 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Wed, 6 Jan 2016 19:52:51 +0000 Subject: [PATCH] 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 --- src/net/http/transport.go | 6 ++++++ src/net/http/transport_test.go | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) 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) -- 2.50.0