aboutsummaryrefslogtreecommitdiff
path: root/src/net/http/transport_test.go
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2023-12-01 16:27:43 -0500
committerGopher Robot <gobot@golang.org>2023-12-01 22:07:19 +0000
commit58bfef82fcafdb13c6f456313d2972c4530a8193 (patch)
tree722394f98dfd386e03dc3003f197911d257305a3 /src/net/http/transport_test.go
parent3220bbe1fbbf3d1f46cea9dce5e012d3b54901ee (diff)
downloadgo-58bfef82fcafdb13c6f456313d2972c4530a8193.tar.gz
go-58bfef82fcafdb13c6f456313d2972c4530a8193.zip
net/http: avoid leaking io.Copy goroutines (and hijacked connections) in TestTransportNoReuseAfterEarlyResponse
Fixes #64252 (maybe). Change-Id: Iba2a403a9347be4206f14acb11591dc2eb7f9fb8 Reviewed-on: https://go-review.googlesource.com/c/go/+/546616 Reviewed-by: Damien Neil <dneil@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Bryan Mills <bcmills@google.com>
Diffstat (limited to 'src/net/http/transport_test.go')
-rw-r--r--src/net/http/transport_test.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go
index 8c09de70ff..3057024b76 100644
--- a/src/net/http/transport_test.go
+++ b/src/net/http/transport_test.go
@@ -3499,6 +3499,7 @@ func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) {
c net.Conn
}
var getOkay bool
+ var copying sync.WaitGroup
closeConn := func() {
sconn.Lock()
defer sconn.Unlock()
@@ -3510,7 +3511,10 @@ func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) {
}
}
}
- defer closeConn()
+ defer func() {
+ closeConn()
+ copying.Wait()
+ }()
ts := newClientServerTest(t, mode, HandlerFunc(func(w ResponseWriter, r *Request) {
if r.Method == "GET" {
@@ -3522,7 +3526,12 @@ func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) {
sconn.c = conn
sconn.Unlock()
conn.Write([]byte("HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo")) // keep-alive
- go io.Copy(io.Discard, conn)
+
+ copying.Add(1)
+ go func() {
+ io.Copy(io.Discard, conn)
+ copying.Done()
+ }()
})).ts
c := ts.Client()