summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Donald Kennedy <grkvlt@apache.org>2011-03-07 16:58:50 +0000
committerAndrew Donald Kennedy <grkvlt@apache.org>2011-03-07 16:58:50 +0000
commit58707bf45bf5803b7ba21fbabf29ed6191bf9deb (patch)
tree3cb33485017f7c429ca46baa898b1c20c16c9f9a
parent4fac5f7ea1105fd9788ea20506c61354af8ce54b (diff)
downloadqpid-python-58707bf45bf5803b7ba21fbabf29ed6191bf9deb.tar.gz
QPID-3114: Record the owner session for exclusive queues in 0-10
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/grkvlt-network-20110301@1078853 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java25
1 files changed, 13 insertions, 12 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
index 42a3975e24..d12ab6d474 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
+++ b/qpid/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 "