From: Brad Fitzpatrick Date: Thu, 21 Apr 2011 23:01:29 +0000 (-0700) Subject: http: close underlying gzip Reader too X-Git-Tag: weekly.2011-04-27~71 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=750b6c63f9e3c81d055ac73395c82381a5e0281e;p=gostls13.git http: close underlying gzip Reader too Fixes #1724 R=rsc CC=golang-dev https://golang.org/cl/4443056 --- diff --git a/src/pkg/http/transport.go b/src/pkg/http/transport.go index 6250880b15..afbccef449 100644 --- a/src/pkg/http/transport.go +++ b/src/pkg/http/transport.go @@ -532,12 +532,12 @@ func (pc *persistConn) roundTrip(req *Request) (resp *Response, err os.Error) { re.res.Header.Del("Content-Encoding") re.res.Header.Del("Content-Length") re.res.ContentLength = -1 - var err os.Error - re.res.Body, err = gzip.NewReader(re.res.Body) + gzReader, err := gzip.NewReader(re.res.Body) if err != nil { pc.close() return nil, err } + re.res.Body = &readFirstCloseBoth{gzReader, re.res.Body} } return re.res, re.err @@ -606,3 +606,18 @@ func (es *bodyEOFSignal) Close() (err os.Error) { } return } + +type readFirstCloseBoth struct { + io.ReadCloser + io.Closer +} + +func (r *readFirstCloseBoth) Close() os.Error { + if err := r.ReadCloser.Close(); err != nil { + return err + } + if err := r.Closer.Close(); err != nil { + return err + } + return nil +}