From d1761cc9a1116c4c78f25b947dbd286dc3a00601 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Thu, 13 May 2010 21:10:34 +0000 Subject: QPID-2588: Ensure we do not make calls on store for a given queue once it has been destroyed git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@944016 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Queue.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/broker/Queue.cpp') 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 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; +} -- cgit v1.2.1