@@ -13,6 +13,7 @@ import (
1313 "time"
1414
1515 "nhooyr.io/websocket/internal/errd"
16+ "nhooyr.io/websocket/internal/util"
1617 "nhooyr.io/websocket/internal/xsync"
1718)
1819
@@ -101,13 +102,20 @@ func newMsgReader(c *Conn) *msgReader {
101102
102103func (mr * msgReader ) resetFlate () {
103104 if mr .flateContextTakeover () {
105+ if mr .dict == nil {
106+ mr .dict = & slidingWindow {}
107+ }
104108 mr .dict .init (32768 )
105109 }
106110 if mr .flateBufio == nil {
107111 mr .flateBufio = getBufioReader (mr .readFunc )
108112 }
109113
110- mr .flateReader = getFlateReader (mr .flateBufio , mr .dict .buf )
114+ if mr .flateContextTakeover () {
115+ mr .flateReader = getFlateReader (mr .flateBufio , mr .dict .buf )
116+ } else {
117+ mr .flateReader = getFlateReader (mr .flateBufio , nil )
118+ }
111119 mr .limitReader .r = mr .flateReader
112120 mr .flateTail .Reset (deflateMessageTail )
113121}
@@ -122,7 +130,10 @@ func (mr *msgReader) putFlateReader() {
122130func (mr * msgReader ) close () {
123131 mr .c .readMu .forceLock ()
124132 mr .putFlateReader ()
125- mr .dict .close ()
133+ if mr .dict != nil {
134+ mr .dict .close ()
135+ mr .dict = nil
136+ }
126137 if mr .flateBufio != nil {
127138 putBufioReader (mr .flateBufio )
128139 }
@@ -348,14 +359,14 @@ type msgReader struct {
348359 flateBufio * bufio.Reader
349360 flateTail strings.Reader
350361 limitReader * limitReader
351- dict slidingWindow
362+ dict * slidingWindow
352363
353364 fin bool
354365 payloadLength int64
355366 maskKey uint32
356367
357- // readerFunc (mr.Read) to avoid continuous allocations.
358- readFunc readerFunc
368+ // util.ReaderFunc (mr.Read) to avoid continuous allocations.
369+ readFunc util. ReaderFunc
359370}
360371
361372func (mr * msgReader ) reset (ctx context.Context , h header ) {
@@ -484,9 +495,3 @@ func (lr *limitReader) Read(p []byte) (int, error) {
484495 }
485496 return n , err
486497}
487-
488- type readerFunc func (p []byte ) (int , error )
489-
490- func (f readerFunc ) Read (p []byte ) (int , error ) {
491- return f (p )
492- }
0 commit comments