]> Cypherpunks repositories - gostls13.git/commitdiff
http: close underlying gzip Reader too
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 21 Apr 2011 23:01:29 +0000 (16:01 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 21 Apr 2011 23:01:29 +0000 (16:01 -0700)
Fixes #1724

R=rsc
CC=golang-dev
https://golang.org/cl/4443056

src/pkg/http/transport.go

index 6250880b158c6119d6ff9ea9323990a1522f74ad..afbccef44930048b3c1e31d12fe5e682e3c4670d 100644 (file)
@@ -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
+}