]> Cypherpunks repositories - gostls13.git/commitdiff
net/http/httputil: don't leak goroutines in DumpRequestOut
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 25 Apr 2014 22:19:32 +0000 (15:19 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 25 Apr 2014 22:19:32 +0000 (15:19 -0700)
Fixes #7869

LGTM=dsymonds
R=golang-codereviews
CC=adg, dsymonds, golang-codereviews, rsc
https://golang.org/cl/91770048

src/pkg/net/http/httputil/dump.go
src/pkg/net/http/httputil/dump_test.go

index acd56184548ea4205eac3d6c2565cef08ebcef96..2a7a413d01a2d02ad6176e1f53e760799eed1290 100644 (file)
@@ -107,6 +107,7 @@ func DumpRequestOut(req *http.Request, body bool) ([]byte, error) {
                        return &dumpConn{io.MultiWriter(&buf, pw), dr}, nil
                },
        }
+       defer t.CloseIdleConnections()
 
        _, err := t.RoundTrip(reqSend)
 
index c2902c8ec56a31bcf1efc2e6303301b2e53c08bd..e1ffb3935ac036a0a422796b9bd91266f91bf901 100644 (file)
@@ -11,6 +11,7 @@ import (
        "io/ioutil"
        "net/http"
        "net/url"
+       "runtime"
        "strings"
        "testing"
 )
@@ -113,6 +114,7 @@ var dumpTests = []dumpTest{
 }
 
 func TestDumpRequest(t *testing.T) {
+       numg0 := runtime.NumGoroutine()
        for i, tt := range dumpTests {
                setBody := func() {
                        if tt.Body == nil {
@@ -156,6 +158,9 @@ func TestDumpRequest(t *testing.T) {
                        }
                }
        }
+       if dg := runtime.NumGoroutine() - numg0; dg > 4 {
+               t.Errorf("Unexpectedly large number of new goroutines: %d new", dg)
+       }
 }
 
 func chunk(s string) string {