aboutsummaryrefslogtreecommitdiff
path: root/src/net/http/server.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2015-08-03 10:04:42 +0200
committerIan Lance Taylor <iant@golang.org>2015-08-03 16:06:17 +0000
commit7aa4e29dce2b941644ff1f19e528ccc4790c519e (patch)
tree27c98c6c3ea85ec4b04fd3e7c5c2563264c99357 /src/net/http/server.go
parent5e15e28e0ed0c70a9c97310d3a7b408cae8f2e23 (diff)
downloadgo-7aa4e29dce2b941644ff1f19e528ccc4790c519e.tar.xz
net/http: fix server/transport data race when sharing the request body
Introduced in https://go-review.googlesource.com/12865 (git rev c2db5f4c). This fix doesn't add any new lock acquistions: it just moves the existing one taken by the unreadDataSize method and moves it out wider. It became flaky at rev c2db5f4c, but now reliably passes again: $ go test -v -race -run=TestTransportAndServerSharedBodyRace -count=100 net/http Fixes #11985 Change-Id: I6956d62839fd7c37e2f7441b1d425793f4a0db30 Reviewed-on: https://go-review.googlesource.com/12909 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/net/http/server.go')
-rw-r--r--src/net/http/server.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/net/http/server.go b/src/net/http/server.go
index 905a8b9ad8..1b292ea2de 100644
--- a/src/net/http/server.go
+++ b/src/net/http/server.go
@@ -880,17 +880,19 @@ func (cw *chunkWriter) writeHeader(p []byte) {
discard = true
}
case *body:
+ bdy.mu.Lock()
switch {
case bdy.closed:
if !bdy.sawEOF {
// Body was closed in handler with non-EOF error.
w.closeAfterReply = true
}
- case bdy.unreadDataSize() >= maxPostHandlerReadBytes:
+ case bdy.unreadDataSizeLocked() >= maxPostHandlerReadBytes:
tooBig = true
default:
discard = true
}
+ bdy.mu.Unlock()
default:
discard = true
}