From: Brad Fitzpatrick Date: Fri, 25 Apr 2014 22:19:32 +0000 (-0700) Subject: net/http/httputil: don't leak goroutines in DumpRequestOut X-Git-Tag: go1.3beta2~191 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d0402cb416b1e39bd6efba102c2c0c4cf0244bf6;p=gostls13.git net/http/httputil: don't leak goroutines in DumpRequestOut Fixes #7869 LGTM=dsymonds R=golang-codereviews CC=adg, dsymonds, golang-codereviews, rsc https://golang.org/cl/91770048 --- diff --git a/src/pkg/net/http/httputil/dump.go b/src/pkg/net/http/httputil/dump.go index acd5618454..2a7a413d01 100644 --- a/src/pkg/net/http/httputil/dump.go +++ b/src/pkg/net/http/httputil/dump.go @@ -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) diff --git a/src/pkg/net/http/httputil/dump_test.go b/src/pkg/net/http/httputil/dump_test.go index c2902c8ec5..e1ffb3935a 100644 --- a/src/pkg/net/http/httputil/dump_test.go +++ b/src/pkg/net/http/httputil/dump_test.go @@ -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 {