Skip to content

Commit 729124c

Browse files
committed
feat: add gzip pool to reuse the reader
1 parent 1ce39e1 commit 729124c

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

Diff for: stream.go

+9-10
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,12 @@ func decodeXML(r io.Reader, v any) error {
8181
return nil
8282
}
8383

84-
func decompressGzip(r io.ReadCloser) (io.ReadCloser, error) {
85-
nr, err := gzip.NewReader(r)
86-
if err != nil {
87-
return nil, err
88-
}
89-
90-
gz := &gzipReader{s: r, r: nr}
84+
var gzipPool = sync.Pool{New: func() any { return new(gzip.Reader) }}
9185

92-
return gz, nil
86+
func decompressGzip(r io.ReadCloser) (io.ReadCloser, error) {
87+
gr := gzipPool.Get().(*gzip.Reader)
88+
err := gr.Reset(r)
89+
return &gzipReader{s: r, r: gr}, err
9390
}
9491

9592
type gzipReader struct {
@@ -102,7 +99,9 @@ func (gz *gzipReader) Read(p []byte) (n int, err error) {
10299
}
103100

104101
func (gz *gzipReader) Close() error {
105-
closeq(gz.r)
102+
if err := gz.r.Reset(&nopReader{}); err == nil {
103+
gzipPool.Put(gz.r)
104+
}
106105
closeq(gz.s)
107106
return nil
108107
}
@@ -125,7 +124,7 @@ func (d *deflateReader) Read(p []byte) (n int, err error) {
125124
}
126125

127126
func (d *deflateReader) Close() error {
128-
if err := d.r.(flate.Resetter).Reset(nopReader{}, nil); err == nil {
127+
if err := d.r.(flate.Resetter).Reset(&nopReader{}, nil); err == nil {
129128
flatePool.Put(d.r)
130129
}
131130
closeq(d.s)

0 commit comments

Comments
 (0)