From d8fd38ea9ef5c5ddd63859eb76a290ffce708b63 Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Tue, 8 Feb 2011 10:23:05 +0000 Subject: QPID-2900: Changed SimpleAMQQueue to avoid race condition in the updating atomic QueueContext._releasedEntry. Race was between thread SubFlushRunner (or QueueRunner) executing method SimpleAMQQueue.setLastSeenEntry and the thread executing the MessageRelase command executing method SimpleAMQQueue.updateSubRequeueEntry. Bolstered the unit tests surrounding the area of change to reduce risk of regression. Overrode TestableMemoryMessageStore#close() to avoid a NPE during tearDown silently cluttering some unit test logs (including SimpleAMQQueueTest). Applied patch from Keith Wall git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1068315 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'qpid/java/broker/src/main') diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index ec6fb1f8de..b003152db6 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java @@ -54,7 +54,6 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import javax.management.JMException; -import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; @@ -742,12 +741,12 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener private void deliverMessage(final Subscription sub, final QueueEntry entry) throws AMQException { + setLastSeenEntry(sub, entry); + _deliveredMessages.incrementAndGet(); incrementUnackedMsgCount(); sub.send(entry); - - setLastSeenEntry(sub,entry); } private boolean subscriptionReadyAndHasInterest(final Subscription sub, final QueueEntry entry) throws AMQException -- cgit v1.2.1