@@ -109,12 +109,17 @@ func (mr *msgReader) putFlateReader() {
109109}
110110
111111func (mr * msgReader ) close () {
112- mr .c .readMu .Lock ( context . Background () )
112+ mr .c .readMu .forceLock ( )
113113 mr .putFlateReader ()
114114 mr .dict .close ()
115115 if mr .flateBufio != nil {
116116 putBufioReader (mr .flateBufio )
117117 }
118+
119+ if mr .c .client {
120+ putBufioReader (mr .c .br )
121+ mr .c .br = nil
122+ }
118123}
119124
120125func (mr * msgReader ) flateContextTakeover () bool {
@@ -292,11 +297,11 @@ func (c *Conn) handleControl(ctx context.Context, h header) (err error) {
292297func (c * Conn ) reader (ctx context.Context ) (_ MessageType , _ io.Reader , err error ) {
293298 defer errd .Wrap (& err , "failed to get reader" )
294299
295- err = c .readMu .Lock (ctx )
300+ err = c .readMu .lock (ctx )
296301 if err != nil {
297302 return 0 , nil , err
298303 }
299- defer c .readMu .Unlock ()
304+ defer c .readMu .unlock ()
300305
301306 if ! c .msgReader .fin {
302307 return 0 , nil , errors .New ("previous message not read to completion" )
@@ -368,11 +373,11 @@ func (mr *msgReader) Read(p []byte) (n int, err error) {
368373 errd .Wrap (& err , "failed to read" )
369374 }()
370375
371- err = mr .c .readMu .Lock (mr .ctx )
376+ err = mr .c .readMu .lock (mr .ctx )
372377 if err != nil {
373378 return 0 , err
374379 }
375- defer mr .c .readMu .Unlock ()
380+ defer mr .c .readMu .unlock ()
376381
377382 n , err = mr .limitReader .Read (p )
378383 if mr .flate && mr .flateContextTakeover () {
0 commit comments