]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: unflake TestTransportConcurrency
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 29 Mar 2013 01:36:06 +0000 (18:36 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 29 Mar 2013 01:36:06 +0000 (18:36 -0700)
Fixes #5005

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/8127043

src/pkg/net/http/transport_test.go

index 4bb711b17fc61a3e48b5f49392a8d10292d5c45d..c6baf797cc1feb10af77aeee513e818948c486c1 100644 (file)
@@ -950,14 +950,28 @@ func TestTransportConcurrency(t *testing.T) {
                fmt.Fprintf(w, "%v", r.FormValue("echo"))
        }))
        defer ts.Close()
-       tr := &Transport{}
+
+       var wg sync.WaitGroup
+       wg.Add(numReqs)
+
+       tr := &Transport{
+               Dial: func(netw, addr string) (c net.Conn, err error) {
+                       // Due to the Transport's "socket late
+                       // binding" (see idleConnCh in transport.go),
+                       // the numReqs HTTP requests below can finish
+                       // with a dial still outstanding.  So count
+                       // our dials as work too so the leak checker
+                       // doesn't complain at us.
+                       wg.Add(1)
+                       defer wg.Done()
+                       return net.Dial(netw, addr)
+               },
+       }
        defer tr.CloseIdleConnections()
        c := &Client{Transport: tr}
        reqs := make(chan string)
        defer close(reqs)
 
-       var wg sync.WaitGroup
-       wg.Add(numReqs)
        for i := 0; i < maxProcs*2; i++ {
                go func() {
                        for req := range reqs {