]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: fix a data race when Request.Cancel is used
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 24 Jul 2015 23:27:07 +0000 (16:27 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 27 Jul 2015 04:07:23 +0000 (04:07 +0000)
The "add a Request.Cancel channel" change (https://golang.org/cl/11601)
added support for "race free" cancellation, but introduced a data race. :)

Noticed while running "go test -race net/http". The test is skipped in
short mode, so we never saw it on the dashboard.

Change-Id: Ica14579d8723f8f9d1691e8d56c30b585b332c64
Reviewed-on: https://go-review.googlesource.com/12663
Reviewed-by: Aaron Jacobs <jacobsa@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/net/http/transport.go

index 41fc6d0e626634fd9b004f971f7bb1bddfb16f6a..41e02fc5802befdc020bf459519967f2d5aafbb9 100644 (file)
@@ -975,6 +975,7 @@ func (pc *persistConn) readLoop() {
                        // the underlying bufio reader.
                        select {
                        case <-rc.req.Cancel:
+                               alive = false
                                pc.t.CancelRequest(rc.req)
                        case bodyEOF := <-waitForBodyRead:
                                pc.t.setReqCanceler(rc.req, nil) // before pc might return to idle pool