From 750b6c63f9e3c81d055ac73395c82381a5e0281e Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 21 Apr 2011 16:01:29 -0700 Subject: [PATCH] http: close underlying gzip Reader too Fixes #1724 R=rsc CC=golang-dev https://golang.org/cl/4443056 --- src/pkg/http/transport.go | 19 +++++++++++++++++-- 1 file 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 +} -- 2.48.1