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 67344ca0c1..0968c33549 100644 --- a/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java @@ -165,14 +165,14 @@ public abstract class ByteToMessageDecoder extends ChannelInboundHandlerAdapter } catch (Throwable t) { throw new DecoderException(t); } finally { - if (out.isEmpty()) { + int size = out.size(); + if (size == 0) { decodeWasNull = true; + } else { + for (int i = 0; i < size; i ++) { + ctx.fireChannelRead(out.get(i)); + } } - - for (int i = 0; i < out.size(); i ++) { - ctx.fireChannelRead(out.get(i)); - } - out.recycle(); } } @@ -207,8 +207,8 @@ public abstract class ByteToMessageDecoder extends ChannelInboundHandlerAdapter cumulation.release(); cumulation = null; } - - for (int i = 0; i < out.size(); i ++) { + int size = out.size(); + for (int i = 0; i < size; i ++) { ctx.fireChannelRead(out.get(i)); } ctx.fireChannelInactive(); 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 d5c03bc5af..23926ee584 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java @@ -98,7 +98,8 @@ public abstract class MessageToMessageDecoder extends ChannelInboundHandlerAd } catch (Exception e) { throw new DecoderException(e); } finally { - for (int i = 0; i < out.size(); i ++) { + int size = out.size(); + for (int i = 0; i < size; i ++) { ctx.fireChannelRead(out.get(i)); } out.recycle(); 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 aa5ce29687..74248d1202 100644 --- a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java @@ -340,7 +340,8 @@ public abstract class ReplayingDecoder extends ByteToMessageDecoder { cumulation = null; } - for (int i = 0; i < out.size(); i ++) { + int size = out.size(); + for (int i = 0; i < size; i ++) { ctx.fireChannelRead(out.get(i)); } ctx.fireChannelInactive();