aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2011-04-21 16:01:29 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2011-04-21 16:01:29 -0700
commit750b6c63f9e3c81d055ac73395c82381a5e0281e (patch)
treecc505ed56977a7fa94596b8182065b0cdcee57c5
parenta1f5f3f10937f15e9cfffa0d806ab2caab87055c (diff)
downloadgo-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.go19
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
+}