diff --git a/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java index 813f4b8ca0..51dcad6473 100644 --- a/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java @@ -45,14 +45,6 @@ public abstract class ByteToMessageDecoder private volatile boolean singleDecode; private boolean decodeWasNull; - private static final ThreadLocal decoderOutput = - new ThreadLocal() { - @Override - protected OutputMessageBuf initialValue() { - return new OutputMessageBuf(); - } - }; - /** * If set then only one message is decoded on each {@link #inboundBufferUpdated(ChannelHandlerContext)} call. * This may be useful if you need to do some protocol upgrade and want to make sure nothing is mixed up. @@ -91,7 +83,7 @@ public abstract class ByteToMessageDecoder @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - OutputMessageBuf out = decoderOutput(); + OutputMessageBuf out = OutputMessageBuf.get(); try { ByteBuf in = ctx.inboundByteBuffer(); if (in.isReadable()) { @@ -131,7 +123,7 @@ public abstract class ByteToMessageDecoder protected void callDecode(ChannelHandlerContext ctx, ByteBuf in) { boolean wasNull = false; boolean decoded = false; - OutputMessageBuf out = decoderOutput(); + OutputMessageBuf out = OutputMessageBuf.get(); assert out.isEmpty(); @@ -217,9 +209,4 @@ public abstract class ByteToMessageDecoder protected void decodeLast(ChannelHandlerContext ctx, ByteBuf in, MessageBuf out) throws Exception { decode(ctx, in, out); } - - final OutputMessageBuf decoderOutput() { - return decoderOutput.get(); - } - } diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java index f66c0e922d..ea17a58475 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java @@ -42,14 +42,6 @@ import io.netty.channel.ChannelInboundMessageHandlerAdapter; */ public abstract class MessageToMessageDecoder extends ChannelInboundMessageHandlerAdapter { - private static final ThreadLocal decoderOutput = - new ThreadLocal() { - @Override - protected OutputMessageBuf initialValue() { - return new OutputMessageBuf(); - } - }; - protected MessageToMessageDecoder() { } protected MessageToMessageDecoder(Class inboundMessageType) { @@ -58,7 +50,7 @@ public abstract class MessageToMessageDecoder extends ChannelInboundMessageHa @Override public final void messageReceived(ChannelHandlerContext ctx, I msg) throws Exception { - OutputMessageBuf out = decoderOutput.get(); + OutputMessageBuf out = OutputMessageBuf.get(); try { decode(ctx, msg, out); } finally { diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java index 32dccdb90e..50790f56e3 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java @@ -39,13 +39,6 @@ import io.netty.channel.ChannelOutboundMessageHandlerAdapter; * */ public abstract class MessageToMessageEncoder extends ChannelOutboundMessageHandlerAdapter { - private static final ThreadLocal encoderOutput = - new ThreadLocal() { - @Override - protected OutputMessageBuf initialValue() { - return new OutputMessageBuf(); - } - }; protected MessageToMessageEncoder() { } @@ -55,9 +48,7 @@ public abstract class MessageToMessageEncoder extends ChannelOutboundMessageH @Override public final void flush(ChannelHandlerContext ctx, I msg) throws Exception { - OutputMessageBuf out = encoderOutput.get(); - - assert out.isEmpty(); + OutputMessageBuf out = OutputMessageBuf.get(); try { encode(ctx, msg, out); 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 bd8f98b1ad..b60a2541a0 100644 --- a/codec/src/main/java/io/netty/handler/codec/OutputMessageBuf.java +++ b/codec/src/main/java/io/netty/handler/codec/OutputMessageBuf.java @@ -20,15 +20,28 @@ import io.netty.buffer.DefaultMessageBuf; final class OutputMessageBuf extends DefaultMessageBuf { private int byteBufs; - public OutputMessageBuf() { + + private static final ThreadLocal output = + new ThreadLocal() { + @Override + protected OutputMessageBuf initialValue() { + return new OutputMessageBuf(); + } + + @Override + public OutputMessageBuf get() { + OutputMessageBuf buf = super.get(); + // Just to be sure + buf.clear(); + return buf; + } + }; + + static OutputMessageBuf get() { + return output.get(); } - public OutputMessageBuf(int initialCapacity) { - super(initialCapacity); - } - - public OutputMessageBuf(int initialCapacity, int maxCapacity) { - super(initialCapacity, maxCapacity); + private OutputMessageBuf() { } @Override diff --git a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java index c1f2071924..979fcdfaee 100644 --- a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java @@ -364,7 +364,7 @@ public abstract class ReplayingDecoder extends ByteToMessageDecoder { @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - OutputMessageBuf out = decoderOutput(); + OutputMessageBuf out = OutputMessageBuf.get(); try { replayable.terminate(); @@ -412,7 +412,7 @@ public abstract class ReplayingDecoder extends ByteToMessageDecoder { protected void callDecode(ChannelHandlerContext ctx, ByteBuf buf) { boolean wasNull = false; ByteBuf in = cumulation; - OutputMessageBuf out = decoderOutput(); + OutputMessageBuf out = OutputMessageBuf.get(); boolean decoded = false; assert out.isEmpty();