@@ -585,19 +585,27 @@ private ResponseBuffers receiveResponseBuffers() throws IOException {
585
585
}
586
586
587
587
ByteBuf messageBuffer = stream .read (messageHeader .getMessageLength () - MESSAGE_HEADER_LENGTH );
588
+ boolean releaseMessageBuffer = true ;
589
+ try {
590
+ if (messageHeader .getOpCode () == OP_COMPRESSED .getValue ()) {
591
+ CompressedHeader compressedHeader = new CompressedHeader (messageBuffer , messageHeader );
588
592
589
- if (messageHeader .getOpCode () == OP_COMPRESSED .getValue ()) {
590
- CompressedHeader compressedHeader = new CompressedHeader (messageBuffer , messageHeader );
591
-
592
- Compressor compressor = getCompressor (compressedHeader );
593
+ Compressor compressor = getCompressor (compressedHeader );
593
594
594
- ByteBuf buffer = getBuffer (compressedHeader .getUncompressedSize ());
595
- compressor .uncompress (messageBuffer , buffer );
595
+ ByteBuf buffer = getBuffer (compressedHeader .getUncompressedSize ());
596
+ compressor .uncompress (messageBuffer , buffer );
596
597
597
- buffer .flip ();
598
- return new ResponseBuffers (new ReplyHeader (buffer , compressedHeader ), buffer );
599
- } else {
600
- return new ResponseBuffers (new ReplyHeader (messageBuffer , messageHeader ), messageBuffer );
598
+ buffer .flip ();
599
+ return new ResponseBuffers (new ReplyHeader (buffer , compressedHeader ), buffer );
600
+ } else {
601
+ ResponseBuffers responseBuffers = new ResponseBuffers (new ReplyHeader (messageBuffer , messageHeader ), messageBuffer );
602
+ releaseMessageBuffer = false ;
603
+ return responseBuffers ;
604
+ }
605
+ } finally {
606
+ if (releaseMessageBuffer ) {
607
+ messageBuffer .release ();
608
+ }
601
609
}
602
610
}
603
611
@@ -653,6 +661,7 @@ public void onResult(final ByteBuf result, final Throwable t) {
653
661
callback .onResult (null , t );
654
662
return ;
655
663
}
664
+ boolean releaseResult = true ;
656
665
try {
657
666
ReplyHeader replyHeader ;
658
667
ByteBuf responseBuffer ;
@@ -667,15 +676,21 @@ public void onResult(final ByteBuf result, final Throwable t) {
667
676
replyHeader = new ReplyHeader (buffer , compressedHeader );
668
677
responseBuffer = buffer ;
669
678
} finally {
679
+ releaseResult = false ;
670
680
result .release ();
671
681
}
672
682
} else {
673
683
replyHeader = new ReplyHeader (result , messageHeader );
674
684
responseBuffer = result ;
685
+ releaseResult = false ;
675
686
}
676
687
callback .onResult (new ResponseBuffers (replyHeader , responseBuffer ), null );
677
688
} catch (Throwable localThrowable ) {
678
689
callback .onResult (null , localThrowable );
690
+ } finally {
691
+ if (releaseResult ) {
692
+ result .release ();
693
+ }
679
694
}
680
695
}
681
696
}
0 commit comments