]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: lock the read-only mutex in shouldRedirect
authorDamien Mathieu <42@dmathieu.com>
Fri, 2 Mar 2018 08:42:02 +0000 (08:42 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 2 Mar 2018 22:03:44 +0000 (22:03 +0000)
Since that method uses 'mux.m', we need to lock the mutex to avoid data races.

Change-Id: I998448a6e482b5d6a1b24f3354bb824906e23172
GitHub-Last-Rev: 163a7d4942e793b328e05a7eb91f6d3fdc4ba12b
GitHub-Pull-Request: golang/go#23994
Reviewed-on: https://go-review.googlesource.com/96575
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>

src/net/http/serve_test.go
src/net/http/server.go

index 5ff08b4036aa7c8a2ace4334896f9f9605795301..2fa3bc664fabfc44e301eec344af1fa4ebb52a55 100644 (file)
@@ -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 {
index c4377e8ce5db2e8ccc86ede650f8ab73ff7aaf80..a7ba753bf50812dc3f7d8417de9ef295751ebffc 100644 (file)
@@ -2223,6 +2223,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 {