From 788b88b7af6c5cb2d111d5fc7e9ba34208e8baff Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 4 Apr 2013 14:37:54 +0900 Subject: [PATCH] Make sure to release the buffer when it's written to the next byte buffer .. otherwise it will leak. --- .../io/netty/handler/codec/OutputMessageBuf.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/codec/src/main/java/io/netty/handler/codec/OutputMessageBuf.java b/codec/src/main/java/io/netty/handler/codec/OutputMessageBuf.java index 7254423d8e..e77397bb6c 100644 --- a/codec/src/main/java/io/netty/handler/codec/OutputMessageBuf.java +++ b/codec/src/main/java/io/netty/handler/codec/OutputMessageBuf.java @@ -16,6 +16,7 @@ package io.netty.handler.codec; import io.netty.buffer.BufType; +import io.netty.buffer.BufUtil; import io.netty.buffer.ByteBuf; import io.netty.buffer.DefaultMessageBuf; import io.netty.buffer.MessageBuf; @@ -102,7 +103,7 @@ final class OutputMessageBuf extends DefaultMessageBuf { if (byteBufCnt == size) { // Contains only ByteBufs for (Object o = poll();;) { - nextByteBuf.writeBytes((ByteBuf) o); + writeAndRelease(nextByteBuf, (ByteBuf) o); if ((o = poll()) == null) { break; } @@ -112,7 +113,7 @@ final class OutputMessageBuf extends DefaultMessageBuf { final MessageBuf nextMsgBuf = ctx.nextInboundMessageBuffer(); for (Object o = poll();;) { if (o instanceof ByteBuf) { - nextByteBuf.writeBytes((ByteBuf) o); + writeAndRelease(nextByteBuf, (ByteBuf) o); } else { nextMsgBuf.add(o); } @@ -141,7 +142,7 @@ final class OutputMessageBuf extends DefaultMessageBuf { if (byteBufCnt == size) { // Contains only ByteBufs for (Object o = poll();;) { - nextByteBuf.writeBytes((ByteBuf) o); + writeAndRelease(nextByteBuf, (ByteBuf) o); if ((o = poll()) == null) { break; } @@ -151,7 +152,7 @@ final class OutputMessageBuf extends DefaultMessageBuf { final MessageBuf nextMsgBuf = ctx.nextOutboundMessageBuffer(); for (Object o = poll();;) { if (o instanceof ByteBuf) { - nextByteBuf.writeBytes((ByteBuf) o); + writeAndRelease(nextByteBuf, (ByteBuf) o); } else { nextMsgBuf.add(o); } @@ -164,4 +165,9 @@ final class OutputMessageBuf extends DefaultMessageBuf { return true; } + + private static void writeAndRelease(ByteBuf dst, ByteBuf src) { + dst.writeBytes(src, src.readerIndex(), src.readableBytes()); + BufUtil.release(src); + } }