From 8ee3575e72d6ee000a99c717d96f36695a8667a0 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Wed, 30 Jul 2014 15:36:33 -0700 Subject: [PATCH] Fix a bug in ChannelOutboundBuffer.forEachFlushedMessage() Motivation: ChannelOutboundBuffer.forEachFlushedMessage() visits even an unflushed messages. Modifications: Stop the loop if the currently visiting entry is unflushedEntry. Result: forEachFlushedMessage() behaves correctly. --- .../java/io/netty/channel/ChannelOutboundBuffer.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java b/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java index 9f61e6de826f..062b944563b5 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java @@ -573,15 +573,20 @@ public void forEachFlushedMessage(MessageProcessor processor) throws Exception { if (processor == null) { throw new NullPointerException("processor"); } + Entry entry = flushedEntry; - while (entry != null) { + if (entry == null) { + return; + } + + do { if (!entry.cancelled) { if (!processor.processMessage(entry.msg)) { return; } } entry = entry.next; - } + } while (entry != null && entry != unflushedEntry); } public interface MessageProcessor {