diff --git a/akka-actor/src/main/java/akka/dispatch/AbstractNodeQueue.java b/akka-actor/src/main/java/akka/dispatch/AbstractNodeQueue.java index 14b543112c..e72a6b2e18 100644 --- a/akka-actor/src/main/java/akka/dispatch/AbstractNodeQueue.java +++ b/akka-actor/src/main/java/akka/dispatch/AbstractNodeQueue.java @@ -22,10 +22,15 @@ public abstract class AbstractNodeQueue extends AtomicReference peek() { + protected final Node peekNode() { return ((Node)Unsafe.instance.getObjectVolatile(this, tailOffset)).next(); } + public final T peek() { + final Node n = peekNode(); + return (n != null) ? n.value : null; + } + public final void add(final T value) { final Node n = new Node(value); getAndSet(n).setNext(n); @@ -37,14 +42,14 @@ public abstract class AbstractNodeQueue extends AtomicReference n = peek();n != null; n = n.next()) + for(Node n = peekNode();n != null; n = n.next()) ++count; return count; } @SuppressWarnings("unchecked") public final T poll() { - final Node next = peek(); + final Node next = peekNode(); if (next == null) return null; else { final T ret = next.value;