summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2008-05-29 17:05:26 +0000
committerRobert Godfrey <rgodfrey@apache.org>2008-05-29 17:05:26 +0000
commitb7f955832801785a59fb9f16a2b866b9c8fa2035 (patch)
treeb21e57bceb758e0fe1cf156ad1a37a015b44c75e
parente7accbd4f2e2b385c61ccce430676927ccb782e7 (diff)
downloadqpid-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.java13
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;
}