diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2008-05-29 17:05:26 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2008-05-29 17:05:26 +0000 |
commit | b7f955832801785a59fb9f16a2b866b9c8fa2035 (patch) | |
tree | b21e57bceb758e0fe1cf156ad1a37a015b44c75e | |
parent | e7accbd4f2e2b385c61ccce430676927ccb782e7 (diff) | |
download | qpid-python-b7f955832801785a59fb9f16a2b866b9c8fa2035.tar.gz |
fix browser behaviour on deliverAsync(sub)
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/broker-queue-refactor@661405 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index a6275900d5..247402e442 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java @@ -1242,10 +1242,12 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener public boolean flushSubscription(Subscription sub, long deliveries) throws AMQException { boolean atTail = false; + boolean advanced; while(!sub.isSuspended() && !atTail && deliveries != 0) { + advanced = false; sub.getSendLock(); try { @@ -1276,6 +1278,7 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener if(newNode != null) { + advanced = true; sub.setLastSeenEntry(node, newNode); node = sub.getLastSeenEntry(); } @@ -1300,7 +1303,7 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener } } - atTail = (_entries.next(node) == null); + atTail = (_entries.next(node) == null) && !advanced; } } @@ -1320,6 +1323,14 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener advanceAllSubscriptions(); } + if(atTail && sub.isAutoClose()) + { + unregisterSubscription(sub); + + ProtocolOutputConverter converter = sub.getChannel().getProtocolSession().getProtocolOutputConverter(); + converter.confirmConsumerAutoClose(sub.getChannel().getChannelId(), sub.getConsumerTag()); + } + return atTail; } |