diff options
author | Bryan C. Mills <bcmills@google.com> | 2023-12-01 16:27:43 -0500 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2023-12-01 22:07:19 +0000 |
commit | 58bfef82fcafdb13c6f456313d2972c4530a8193 (patch) | |
tree | 722394f98dfd386e03dc3003f197911d257305a3 /src/net/http/transport_test.go | |
parent | 3220bbe1fbbf3d1f46cea9dce5e012d3b54901ee (diff) | |
download | go-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.go | 13 |
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() |