File tree 1 file changed +9
-12
lines changed
1 file changed +9
-12
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,8 @@ 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
+ gz .r .Reset (nopReader {})
103
+ gzipPool .Put (gz .r )
106
104
closeq (gz .s )
107
105
return nil
108
106
}
@@ -125,9 +123,8 @@ func (d *deflateReader) Read(p []byte) (n int, err error) {
125
123
}
126
124
127
125
func (d * deflateReader ) Close () error {
128
- if err := d .r .(flate.Resetter ).Reset (nopReader {}, nil ); err == nil {
129
- flatePool .Put (d .r )
130
- }
126
+ d .r .(flate.Resetter ).Reset (nopReader {}, nil )
127
+ flatePool .Put (d .r )
131
128
closeq (d .s )
132
129
return nil
133
130
}
You can’t perform that action at this time.
0 commit comments