diff --git a/src/pkg/net/http/transport.go b/src/pkg/net/http/transport.go index 00509acd44..fe6318824e 100644 --- a/src/pkg/net/http/transport.go +++ b/src/pkg/net/http/transport.go @@ -538,7 +538,6 @@ func remoteSideClosed(err error) bool { func (pc *persistConn) readLoop() { defer close(pc.closech) - defer close(pc.writech) alive := true var lastbody io.ReadCloser // last response body, if any, read on this connection @@ -640,19 +639,24 @@ func (pc *persistConn) readLoop() { } func (pc *persistConn) writeLoop() { - for wr := range pc.writech { - if pc.isBroken() { - wr.ch <- errors.New("http: can't write HTTP request on broken connection") - continue + for { + select { + case wr := <-pc.writech: + if pc.isBroken() { + wr.ch <- errors.New("http: can't write HTTP request on broken connection") + continue + } + err := wr.req.Request.write(pc.bw, pc.isProxy, wr.req.extra) + if err == nil { + err = pc.bw.Flush() + } + if err != nil { + pc.markBroken() + } + wr.ch <- err + case <-pc.closech: + return } - err := wr.req.Request.write(pc.bw, pc.isProxy, wr.req.extra) - if err == nil { - err = pc.bw.Flush() - } - if err != nil { - pc.markBroken() - } - wr.ch <- err } }