Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

io/ioutil: data race on blackHole #3970

Closed
@dvyukov

Description

When running:
$ go test -race net/http
ThreadSanitizer says:
WARNING: DATA RACE
Write by goroutine 205:
 bufio.(*Reader).Read()
 src/pkg/bufio/bufio.go:152 +0x4b6
 io.(*LimitedReader).Read()
 src/pkg/io/io.go:406 +0x181
 net/http.(*body).Read()
 src/pkg/net/http/transfer.go:538 +0xd4
 io/ioutil.devNull.ReadFrom()
 src/pkg/io/ioutil/ioutil.go:138 +0x6f
 io/ioutil.devNull.ReadFrom·i()
 src/pkg/io/ioutil/ioutil.go:0 +0x52
 io.Copy()
 src/pkg/io/io.go:352 +0xc6
 net/http.(*body).Close()
 src/pkg/net/http/transfer.go:628 +0x170
 net/http.(*bodyEOFSignal).Close()
 src/pkg/net/http/transport.go:817 +0xb9
 net/http_test.func·082()
 src/pkg/net/http/transport_test.go:428 +0xb7
Previous write by goroutine 111:
 bufio.(*Reader).Read()
 src/pkg/bufio/bufio.go:152 +0x4b6
 io.(*LimitedReader).Read()
 src/pkg/io/io.go:406 +0x181
 net/http.(*body).Read()
 src/pkg/net/http/transfer.go:538 +0xd4
 io/ioutil.devNull.ReadFrom()
 src/pkg/io/ioutil/ioutil.go:138 +0x6f
 io/ioutil.devNull.ReadFrom·i()
 src/pkg/io/ioutil/ioutil.go:0 +0x52
 io.Copy()
 src/pkg/io/io.go:352 +0xc6
 net/http.(*body).Close()
 src/pkg/net/http/transfer.go:628 +0x170
 net/http.(*bodyEOFSignal).Close()
 src/pkg/net/http/transport.go:817 +0xb9
 net/http_test.func·082()
 src/pkg/net/http/transport_test.go:428 +0xb7
Goroutine 205 (running) created at:
 net/http_test.TestStressSurpriseServerCloses()
 src/pkg/net/http/transport_test.go:432 +0x369
 testing.tRunner()
 src/pkg/testing/testing.go:297 +0xc9
Goroutine 111 (running) created at:
 net/http_test.TestStressSurpriseServerCloses()
 src/pkg/net/http/transport_test.go:432 +0x369
 testing.tRunner()
 src/pkg/testing/testing.go:297 +0xc9
When devNull is used all goroutines write to the single blackHole slice. The race aside,
it has performance implications when several parallel goroutines write the same memory.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /