diff options
Diffstat (limited to 'libgo/go/net/http/transport.go')
-rw-r--r-- | libgo/go/net/http/transport.go | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libgo/go/net/http/transport.go b/libgo/go/net/http/transport.go index 1b9ad1b..4de070f 100644 --- a/libgo/go/net/http/transport.go +++ b/libgo/go/net/http/transport.go @@ -494,12 +494,6 @@ func (pc *persistConn) isBroken() bool { return pc.broken } -func (pc *persistConn) expectingResponse() bool { - pc.lk.Lock() - defer pc.lk.Unlock() - return pc.numExpectedResponses > 0 -} - var remoteSideClosedFunc func(error) bool // or nil to use default func remoteSideClosed(err error) bool { @@ -518,14 +512,18 @@ func (pc *persistConn) readLoop() { for alive { pb, err := pc.br.Peek(1) - if !pc.expectingResponse() { + + pc.lk.Lock() + if pc.numExpectedResponses == 0 { + pc.closeLocked() + pc.lk.Unlock() if len(pb) > 0 { log.Printf("Unsolicited response received on idle HTTP channel starting with %q; err=%v", string(pb), err) } - pc.close() return } + pc.lk.Unlock() rc := <-pc.reqch @@ -649,6 +647,10 @@ func (pc *persistConn) roundTrip(req *transportRequest) (resp *Response, err err func (pc *persistConn) close() { pc.lk.Lock() defer pc.lk.Unlock() + pc.closeLocked() +} + +func (pc *persistConn) closeLocked() { pc.broken = true pc.conn.Close() pc.mutateHeaderFunc = nil |