aboutsummaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorDamien Neil <dneil@google.com>2021-03-25 11:11:03 -0700
committerDamien Neil <dneil@google.com>2021-03-25 20:28:20 +0000
commit5cec8b85e5dc75ef21b62efb6bd93f9007385e34 (patch)
treebd8d5956e75d29b9255969d4428eaa165970e3f6 /src/net
parent7ce361737fad30a78e47f2d12bd797efcc056b1c (diff)
downloadgo-5cec8b85e5dc75ef21b62efb6bd93f9007385e34.tar.gz
go-5cec8b85e5dc75ef21b62efb6bd93f9007385e34.zip
net/http/httptest: wait for user ConnState hooks
Ensure that user ConnState callbacks have completed before returning from (*httptest.Server).Close. Fixes: #37510 Fixes: #37505 Fixes: #45237 Change-Id: I8fe7baa089fbe4f3836bf6ae9767c7b1270d1331 Reviewed-on: https://go-review.googlesource.com/c/go/+/304829 Trust: Damien Neil <dneil@google.com> Run-TryBot: Damien Neil <dneil@google.com> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/net')
-rw-r--r--src/net/http/httptest/server.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/net/http/httptest/server.go b/src/net/http/httptest/server.go
index 65165d9eb3..a02a6d64c3 100644
--- a/src/net/http/httptest/server.go
+++ b/src/net/http/httptest/server.go
@@ -316,6 +316,13 @@ func (s *Server) wrap() {
s.Config.ConnState = func(c net.Conn, cs http.ConnState) {
s.mu.Lock()
defer s.mu.Unlock()
+
+ // Keep Close from returning until the user's ConnState hook
+ // (if any) finishes. Without this, the call to forgetConn
+ // below might send the count to 0 before we run the hook.
+ s.wg.Add(1)
+ defer s.wg.Done()
+
switch cs {
case http.StateNew:
s.wg.Add(1)