File tree 1 file changed +9
-10
lines changed
1 file changed +9
-10
lines changed Original file line number Diff line number Diff line change @@ -81,15 +81,12 @@ func decodeXML(r io.Reader, v any) error {
81
81
return nil
82
82
}
83
83
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 ) }}
91
85
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
93
90
}
94
91
95
92
type gzipReader struct {
@@ -102,7 +99,9 @@ func (gz *gzipReader) Read(p []byte) (n int, err error) {
102
99
}
103
100
104
101
func (gz * gzipReader ) Close () error {
105
- closeq (gz .r )
102
+ if err := gz .r .Reset (& nopReader {}); err == nil {
103
+ gzipPool .Put (gz .r )
104
+ }
106
105
closeq (gz .s )
107
106
return nil
108
107
}
@@ -125,7 +124,7 @@ func (d *deflateReader) Read(p []byte) (n int, err error) {
125
124
}
126
125
127
126
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 {
129
128
flatePool .Put (d .r )
130
129
}
131
130
closeq (d .s )
You can’t perform that action at this time.
0 commit comments