summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Queue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/Queue.cpp')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index 417aaddb4a..90b0d4cc52 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -725,6 +725,7 @@ bool Queue::enqueue(TransactionContext* ctxt, boost::intrusive_ptr<Message> msg,
Messages dequeues;
{
Mutex::ScopedLock locker(messageLock);
+ if (deleted) return false;
policy->tryEnqueue(msg);
policy->getPendingDequeues(dequeues);
}
@@ -766,7 +767,7 @@ bool Queue::dequeue(TransactionContext* ctxt, const QueuedMessage& msg)
{
{
Mutex::ScopedLock locker(messageLock);
- if (!isEnqueued(msg)) return false;
+ if (deleted || !isEnqueued(msg)) return false;
if (!ctxt) {
dequeued(msg);
}
@@ -892,6 +893,7 @@ void Queue::destroy()
popAndDequeue();
}
alternateExchange->decAlternateUsers();
+ deleted = true;
}
if (store) {
@@ -1169,3 +1171,9 @@ void Queue::checkNotDeleted()
throw ResourceDeletedException(QPID_MSG("Queue " << getName() << " has been deleted."));
}
}
+
+bool Queue::isValid()
+{
+ Mutex::ScopedLock locker(messageLock);
+ return !deleted;
+}