New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net/http: undocumented race condition on simultaneous calls to (*http.Server).Serve #16505

Closed
benburkert opened this Issue Jul 26, 2016 · 4 comments

Comments

Projects
None yet
4 participants
@benburkert
Contributor

benburkert commented Jul 26, 2016

Please answer these questions before submitting your issue. Thanks!

  1. What version of Go are you using (go version)?

go version go1.7rc3 darwin/amd64

  1. What operating system and processor architecture are you using (go env)?
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/benburkert"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.7rc3/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.7rc3/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/jl/n78jzg3j6nb8nzbn1vvpg9xc0000gn/T/go-build053329638=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
  1. What did you do?
    If possible, provide a recipe for reproducing the error.
    A complete runnable program is good.
    A link on play.golang.org is best.

run this with the race detector: https://play.golang.org/p/9WopZBGsFq

  1. What did you expect to see?

I think the documentation should mention that it is not safe to call Serve with multiple listeners. I have seen this pattern repeated many times for the http & https listeners.

  1. What did you see instead?

Data race warning: https://gist.github.com/benburkert/4eb8e7e4acb72984f7568f4e1fdf1847

@nhooyr

This comment has been minimized.

Show comment
Hide comment
@nhooyr

nhooyr Jul 26, 2016

Contributor

This was introduced by http2.

http.Server.http2ConfigureServer can write to s.TLSConfig at the same time as http.Server.shouldConfigureHTTP2ForServe can read it.

Contributor

nhooyr commented Jul 26, 2016

This was introduced by http2.

http.Server.http2ConfigureServer can write to s.TLSConfig at the same time as http.Server.shouldConfigureHTTP2ForServe can read it.

@bradfitz

This comment has been minimized.

Show comment
Hide comment
@bradfitz

bradfitz Jul 26, 2016

Member

This was introduced by http2.

No, it was introduced in b5f0aff which was one month ago. Go 1.6 included http2 and doesn't exhibit this race.

Member

bradfitz commented Jul 26, 2016

This was introduced by http2.

No, it was introduced in b5f0aff which was one month ago. Go 1.6 included http2 and doesn't exhibit this race.

@bradfitz bradfitz added this to the Go1.7Maybe milestone Jul 26, 2016

@bradfitz bradfitz self-assigned this Jul 26, 2016

@nhooyr

This comment has been minimized.

Show comment
Hide comment
@nhooyr

nhooyr Jul 26, 2016

Contributor

Oh, my bad, sorry.

Contributor

nhooyr commented Jul 26, 2016

Oh, my bad, sorry.

@gopherbot

This comment has been minimized.

Show comment
Hide comment
@gopherbot

gopherbot commented Jul 26, 2016

CL https://golang.org/cl/25280 mentions this issue.

@gopherbot gopherbot closed this in c80e0d3 Jul 27, 2016

@golang golang locked and limited conversation to collaborators Jul 27, 2017

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.