The consecutive calls to Head would sometimes get different
connections depending on if the readLoop had finished executing
and placed its connection on the idle list or not. This change
ensures that readLoop completes before we make our second connection.
Fixes #11250
Change-Id: Ibdbc4d3d0aba0162452f6dec5928355a37dda70a
Reviewed-on: https://go-review.googlesource.com/11170
Reviewed-by: Russ Cox <rsc@golang.org>
tr := &Transport{DisableKeepAlives: false}
c := &Client{Transport: tr}
+ // Ensure that we wait for the readLoop to complete before
+ // calling Head again
+ didRead := make(chan bool)
+ SetReadLoopBeforeNextReadHook(func() { didRead <- true })
+ defer SetReadLoopBeforeNextReadHook(nil)
+
res1, err := c.Head(ts.URL)
+ <-didRead
+
if err != nil {
t.Fatalf("request 1 error: %v", err)
}
+
res2, err := c.Head(ts.URL)
+ <-didRead
+
if err != nil {
t.Fatalf("request 2 error: %v", err)
}