File tree Expand file tree Collapse file tree 2 files changed +20
-1
lines changed Expand file tree Collapse file tree 2 files changed +20
-1
lines changed Original file line number Diff line number Diff line change @@ -115,16 +115,31 @@ func putFlateWriter(w *flate.Writer) {
115115}
116116
117117type slidingWindow struct {
118- r io.Reader
119118 buf []byte
120119}
121120
121+ var swPool = map [int ]* sync.Pool {}
122+
122123func newSlidingWindow (n int ) * slidingWindow {
124+ p , ok := swPool [n ]
125+ if ! ok {
126+ p = & sync.Pool {}
127+ swPool [n ] = p
128+ }
129+ sw , ok := p .Get ().(* slidingWindow )
130+ if ok {
131+ return sw
132+ }
123133 return & slidingWindow {
124134 buf : make ([]byte , 0 , n ),
125135 }
126136}
127137
138+ func returnSlidingWindow (sw * slidingWindow ) {
139+ sw .buf = sw .buf [:0 ]
140+ swPool [cap (sw .buf )].Put (sw )
141+ }
142+
128143func (w * slidingWindow ) write (p []byte ) {
129144 if len (p ) >= cap (w .buf ) {
130145 w .buf = w .buf [:cap (w .buf )]
Original file line number Diff line number Diff line change @@ -110,6 +110,10 @@ func (mr *msgReader) returnFlateReader() {
110110func (mr * msgReader ) close () {
111111 mr .c .readMu .Lock (context .Background ())
112112 mr .returnFlateReader ()
113+
114+ if mr .dict != nil {
115+ returnSlidingWindow (mr .dict )
116+ }
113117}
114118
115119func (mr * msgReader ) flateContextTakeover () bool {
You can’t perform that action at this time.
0 commit comments