diff options
| author | Robert Gemmell <robbie@apache.org> | 2011-02-08 10:23:05 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2011-02-08 10:23:05 +0000 |
| commit | d8fd38ea9ef5c5ddd63859eb76a290ffce708b63 (patch) | |
| tree | 4c8e2bdff8375620ad6bd170d175717f3cd166bd /qpid/java/broker/src/main | |
| parent | 5045a8bc614c60b8c40d90490a2c0722d2d82ca9 (diff) | |
| download | qpid-python-d8fd38ea9ef5c5ddd63859eb76a290ffce708b63.tar.gz | |
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 <keith.wall@gmail.com>
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1068315 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker/src/main')
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java | 5 |
1 files changed, 2 insertions, 3 deletions
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 |
