summaryrefslogtreecommitdiff
path: root/src/pkg
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-09-07 20:13:35 -0400
committerRuss Cox <rsc@golang.org>2014-09-07 20:13:35 -0400
commit05a2ae05ebafd0bba48fe2e50ce332a5e3e2ed0e (patch)
tree28f8c0c03ad43f581070148d524b0eab9d17d577 /src/pkg
parent8515efad2351fed4cc46b761b868cd21df69606e (diff)
downloadgo-05a2ae05ebafd0bba48fe2e50ce332a5e3e2ed0e.tar.gz
net/http/httptest: fix deadlock in TestIssue7264
I am seeing deadlocks waiting on <-inHandler. It seems to me that there is no guarantee that the handler actually runs, if the client does write header close connection fast enough. The server might see the EOF on the connection before it manages to invoke the handler. This change fixes the deadlock, but it may make the test not actually test anything. Not sure. LGTM=bradfitz R=bradfitz, dvyukov CC=golang-codereviews https://codereview.appspot.com/140970043
Diffstat (limited to 'src/pkg')
-rw-r--r--src/pkg/net/http/httptest/server_test.go10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/pkg/net/http/httptest/server_test.go b/src/pkg/net/http/httptest/server_test.go
index 501cc8a99..a1c38c50b 100644
--- a/src/pkg/net/http/httptest/server_test.go
+++ b/src/pkg/net/http/httptest/server_test.go
@@ -32,10 +32,7 @@ func TestServer(t *testing.T) {
func TestIssue7264(t *testing.T) {
for i := 0; i < 1000; i++ {
func() {
- inHandler := make(chan bool, 1)
- ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- inHandler <- true
- }))
+ ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}))
defer ts.Close()
tr := &http.Transport{
ResponseHeaderTimeout: time.Nanosecond,
@@ -43,7 +40,10 @@ func TestIssue7264(t *testing.T) {
defer tr.CloseIdleConnections()
c := &http.Client{Transport: tr}
res, err := c.Get(ts.URL)
- <-inHandler
+ // err can be non-nil here.
+ // If the client writes the header and then immediately observes
+ // the timeout and closes the connection, the server might never
+ // have gotten a chance to send a response. That's okay.
if err == nil {
res.Body.Close()
}