-
Notifications
You must be signed in to change notification settings - Fork 18.8k
Closed
Labels
Milestone
Description
When running the race detector against x/net/http2 at rev 2fd7f15, Go 1.5.1 on OS X detects this race, but Go tip (rev ab7e82e) does not:
bradfitz@laptop http2$ go version
go version go1.5.1 darwin/amd64
bradfitz@laptop http2$ go test -v -race -run=TestServer_Response_RST_Unblocks_LargeWrite
=== RUN TestServer_Response_RST_Unblocks_LargeWrite
==================
WARNING: DATA RACE
Read by goroutine 14:
golang.org/x/net/http2.(*writeScheduler).take()
/Users/bradfitz/src/golang.org/x/net/http2/writesched.go:123 +0x3af
golang.org/x/net/http2.(*serverConn).scheduleFrameWrite()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:916 +0x3ab
golang.org/x/net/http2.(*serverConn).writeFrame()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:802 +0xa2
golang.org/x/net/http2.(*serverConn).serve()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:674 +0xb90
golang.org/x/net/http2.(*Server).handleConn()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:282 +0xf93
golang.org/x/net/http2.ConfigureServer.func1()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:193 +0xc4
net/http.(*conn).serve()
/private/var/folders/q8/bf_4b1ts2zj0l7b0p1dv36lr0000gp/T/workdir/go/src/net/http/server.go:1312 +0x9ce
Previous write by goroutine 28:
golang.org/x/net/http2.(*responseWriterState).writeChunk()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1770 +0x4f4
golang.org/x/net/http2.(*responseWriter).Flush()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1793 +0x140
golang.org/x/net/http2.(*responseWriter).handlerDone()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1893 +0xc6
golang.org/x/net/http2.(*serverConn).runHandler()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1526 +0x94
Goroutine 14 (running) created at:
net/http.(*Server).Serve()
/private/var/folders/q8/bf_4b1ts2zj0l7b0p1dv36lr0000gp/T/workdir/go/src/net/http/server.go:1910 +0x464
Goroutine 28 (finished) created at:
golang.org/x/net/http2.(*serverConn).processHeaderBlockFragment()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1384 +0x6ad
golang.org/x/net/http2.(*serverConn).processHeaders()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1328 +0x83a
golang.org/x/net/http2.(*serverConn).processFrame()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:1048 +0x718
golang.org/x/net/http2.(*serverConn).processFrameFromReader()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:998 +0xb96
golang.org/x/net/http2.(*serverConn).serve()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:678 +0xd15
golang.org/x/net/http2.(*Server).handleConn()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:282 +0xf93
golang.org/x/net/http2.ConfigureServer.func1()
/Users/bradfitz/src/golang.org/x/net/http2/server.go:193 +0xc4
net/http.(*conn).serve()
/private/var/folders/q8/bf_4b1ts2zj0l7b0p1dv36lr0000gp/T/workdir/go/src/net/http/server.go:1312 +0x9ce
==================
--- PASS: TestServer_Response_RST_Unblocks_LargeWrite (0.06s)
PASS
Found 1 data race(s)
exit status 66
FAIL
golang.org/x/net/http2 2.499s
And the missed detection:
bradfitz@laptop http2$ go version
go version devel +ab7e82e Thu Oct 29 16:25:37 2015 +0000 darwin/amd64
bradfitz@laptop http2$ go test -v -race -run=TestServer_Response_RST_Unblocks_LargeWrite
=== RUN TestServer_Response_RST_Unblocks_LargeWrite
--- PASS: TestServer_Response_RST_Unblocks_LargeWrite (0.06s)
PASS
ok golang.org/x/net/http2 2.729s
Even with a large --count= value, in case it was scheduling or something.