diff --git a/src/main/java/org/jboss/netty/util/FastQueue.java b/src/main/java/org/jboss/netty/util/FastQueue.java index a688806606..f5d1660ee4 100644 --- a/src/main/java/org/jboss/netty/util/FastQueue.java +++ b/src/main/java/org/jboss/netty/util/FastQueue.java @@ -57,21 +57,26 @@ public class FastQueue { @SuppressWarnings("unchecked") public E poll() { - if (drainedElements == null) { - synchronized (this) { - drainedElements = elements; - drainedElementCount = size; - elements = null; - size = 0; + for (;;) { + if (drainedElements == null) { + synchronized (this) { + drainedElements = elements; + if (elements == null) { + break; + } + drainedElementCount = size; + elements = null; + size = 0; + } + index = 0; } - index = 0; - } - if (index < drainedElementCount) { - return (E) drainedElements[index ++]; - } + if (index < drainedElementCount) { + return (E) drainedElements[index ++]; + } - drainedElements = null; + drainedElements = null; + } return null; } }