diff options
author | Brad Fitzpatrick <bradfitz@golang.org> | 2011-04-21 16:01:29 -0700 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2011-04-21 16:01:29 -0700 |
commit | 750b6c63f9e3c81d055ac73395c82381a5e0281e (patch) | |
tree | cc505ed56977a7fa94596b8182065b0cdcee57c5 | |
parent | a1f5f3f10937f15e9cfffa0d806ab2caab87055c (diff) | |
download | go-750b6c63f9e3c81d055ac73395c82381a5e0281e.tar.gz go-750b6c63f9e3c81d055ac73395c82381a5e0281e.zip |
http: close underlying gzip Reader too
Fixes #1724
R=rsc
CC=golang-dev
https://golang.org/cl/4443056
-rw-r--r-- | src/pkg/http/transport.go | 19 |
1 files changed, 17 insertions, 2 deletions
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 +} |