aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/net/http/serve_test.go10
-rw-r--r--src/net/http/server.go3
2 files changed, 13 insertions, 0 deletions
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go
index 9cbfe872af..1df319ac1f 100644
--- a/src/net/http/serve_test.go
+++ b/src/net/http/serve_test.go
@@ -581,6 +581,16 @@ func TestServeWithSlashRedirectForHostPatterns(t *testing.T) {
}
}
+func TestShouldRedirectConcurrency(t *testing.T) {
+ setParallel(t)
+ defer afterTest(t)
+
+ mux := NewServeMux()
+ ts := httptest.NewServer(mux)
+ defer ts.Close()
+ mux.HandleFunc("/", func(w ResponseWriter, r *Request) {})
+}
+
func BenchmarkServeMux(b *testing.B) {
type test struct {
diff --git a/src/net/http/server.go b/src/net/http/server.go
index 57e1b5dacb..88e00a2edd 100644
--- a/src/net/http/server.go
+++ b/src/net/http/server.go
@@ -2233,6 +2233,9 @@ func (mux *ServeMux) redirectToPathSlash(host, path string, u *url.URL) (*url.UR
// path+"/". This should happen if a handler is registered for path+"/" but
// not path -- see comments at ServeMux.
func (mux *ServeMux) shouldRedirect(host, path string) bool {
+ mux.mu.RLock()
+ defer mux.mu.RUnlock()
+
p := []string{path, host + path}
for _, c := range p {