diff options
| author | Andrew Donald Kennedy <grkvlt@apache.org> | 2011-03-04 15:07:28 +0000 |
|---|---|---|
| committer | Andrew Donald Kennedy <grkvlt@apache.org> | 2011-03-04 15:07:28 +0000 |
| commit | 61b5ae9f3a61be4ed428fbf6f376cac89e37040f (patch) | |
| tree | 2adc836b833b08c5cfda6dbaddc0fc5071c7a4b4 /java | |
| parent | fa692ba2b1be4b56c7e9ca0e519ffbb4882b3f64 (diff) | |
| download | qpid-python-61b5ae9f3a61be4ed428fbf6f376cac89e37040f.tar.gz | |
QPID-3114: Record the owner session for exclusive queues in 0-10
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1077989 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
| -rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java b/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java index 42a3975e24..d12ab6d474 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java +++ b/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java @@ -209,26 +209,27 @@ public class ServerSessionDelegate extends SessionDelegate } else { - if(queue.isExclusive()) { + ServerSession s = (ServerSession) session; + queue.setExclusiveOwningSession(s); if(queue.getPrincipalHolder() == null) { - queue.setPrincipalHolder((ServerSession)session); + queue.setPrincipalHolder(s); + queue.setExclusiveOwningSession(s); ((ServerSession) session).addSessionCloseTask(new ServerSession.Task() { - public void doTask(ServerSession session) { if(queue.getPrincipalHolder() == session) { queue.setPrincipalHolder(null); + queue.setExclusiveOwningSession(null); } } }); } - } FlowCreditManager_0_10 creditManager = new WindowCreditManager(0L,0L); @@ -969,10 +970,10 @@ public class ServerSessionDelegate extends SessionDelegate } - if(method.hasAutoDelete() - && method.getAutoDelete() - && method.hasExclusive() - && method.getExclusive()) + if (method.hasAutoDelete() + && method.getAutoDelete() + && method.hasExclusive() + && method.getExclusive()) { final AMQQueue q = queue; final ServerSession.Task deleteQueueTask = new ServerSession.Task() @@ -999,12 +1000,12 @@ public class ServerSessionDelegate extends SessionDelegate } }); } - else if(method.getExclusive()) + if (method.hasExclusive() + && method.getExclusive()) { final AMQQueue q = queue; final ServerSession.Task removeExclusive = new ServerSession.Task() { - public void doTask(ServerSession session) { q.setPrincipalHolder(null); @@ -1012,10 +1013,10 @@ public class ServerSessionDelegate extends SessionDelegate } }; final ServerSession s = (ServerSession) session; + q.setExclusiveOwningSession(s); s.addSessionCloseTask(removeExclusive); queue.addQueueDeleteTask(new AMQQueue.Task() { - public void doTask(AMQQueue queue) throws AMQException { s.removeSessionCloseTask(removeExclusive); @@ -1029,7 +1030,7 @@ public class ServerSessionDelegate extends SessionDelegate } } } - else if (method.getExclusive() && (queue.getPrincipalHolder() != null && !queue.getPrincipalHolder().equals(session))) + else if (method.getExclusive() && (queue.getExclusiveOwningSession() != null && !queue.getExclusiveOwningSession().equals(session))) { String description = "Cannot declare queue('" + queueName + "')," + " as exclusive queue with same name " |
