diff options
author | Brad Fitzpatrick <bradfitz@golang.org> | 2016-11-10 16:43:15 +0000 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2016-11-10 18:30:49 +0000 |
commit | 8cd55615d4d00f48c30dff85d5d5e3f2adce70ce (patch) | |
tree | 30372104e50dc600de59d35d55cfeb97feadfda4 | |
parent | 8d0c105407d235c85a163c0cda5bda86e5219c36 (diff) | |
download | go-8cd55615d4d00f48c30dff85d5d5e3f2adce70ce.tar.gz go-8cd55615d4d00f48c30dff85d5d5e3f2adce70ce.zip |
net/http: fix Server.Close double Lock
Fixes #17878
Change-Id: I062ac514239068c58175c9ee7964b3590f956a82
Reviewed-on: https://go-review.googlesource.com/33026
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r-- | src/net/http/serve_test.go | 7 | ||||
-rw-r--r-- | src/net/http/server.go | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go index 08b9862e16..6fd9912b5e 100644 --- a/src/net/http/serve_test.go +++ b/src/net/http/serve_test.go @@ -4988,3 +4988,10 @@ func testServerShutdown(t *testing.T, h2 bool) { t.Fatal("second request should fail. server should be shut down") } } + +// Issue 17878: tests that we can call Close twice. +func TestServerCloseDeadlock(t *testing.T) { + var s Server + s.Close() + s.Close() +} diff --git a/src/net/http/server.go b/src/net/http/server.go index 0959ac6f85..d78fd71a8d 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -2362,7 +2362,7 @@ func (s *Server) closeDoneChanLocked() { // regardless of their state. For a graceful shutdown, use Shutdown. func (s *Server) Close() error { s.mu.Lock() - defer s.mu.Lock() + defer s.mu.Unlock() s.closeDoneChanLocked() err := s.closeListenersLocked() for c := range s.activeConn { |