Skip to content

net/http: data race in closing http.Response.Body when still reading it #9946

Closed
@yichengq

Description

@yichengq
> ==================
> WARNING: DATA RACE
> Write by goroutine 499:
>   net/http.(*persistConn).readLoop()
>       /usr/local/go/src/net/http/transport.go:929 +0xdb8
>
> Previous read by goroutine 189:
>   net/http.func·024()
>       /usr/local/go/src/net/http/transport.go:910 +0x4c
>   net/http.(*bodyEOFSignal).condfn()
>       /usr/local/go/src/net/http/transport.go:1228 +0x105
>   net/http.(*bodyEOFSignal).Read()
>       /usr/local/go/src/net/http/transport.go:1200 +0x41c
>   io.ReadAtLeast()
>       /usr/local/go/src/io/io.go:298 +0x128
>   io.ReadFull()
>       /usr/local/go/src/io/io.go:316 +0x7d
>   encoding/binary.Read()
>       /usr/local/go/src/encoding/binary/binary.go:148 +0x14f
>   github.com/coreos/etcd/rafthttp.(*msgAppDecoder).decode()
>       /Users/unihorn/gopath/src/github.com/coreos/etcd/rafthttp/msgapp.go:66
> +0x13c
>   github.com/coreos/etcd/rafthttp.(*streamReader).run()
>
> /Users/unihorn/gopath/src/github.com/coreos/etcd/rafthttp/stream.go:309
> +0x387
>   runtime.goexit()
>       /usr/local/go/src/runtime/asm_amd64.s:2232 +0x0
>   net/http.func·008()
>       /usr/local/go/src/net/http/server.go:171 +0xb6
>
> Goroutine 499 (running) created at:
>   net/http.(*Transport).dialConn()
>       /usr/local/go/src/net/http/transport.go:660 +0x10d4
>   net/http.func·019()
>       /usr/local/go/src/net/http/transport.go:520 +0x8d

They share a alive variable, and this may be the problem.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions