summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Queue.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2008-02-21 21:23:37 +0000
committerGordon Sim <gsim@apache.org>2008-02-21 21:23:37 +0000
commitb898761ff46be9bd8de073a4bec260825fdefa47 (patch)
tree45387c6c4a000cb7056ea0418a1c6eb2974bfbf6 /cpp/src/qpid/broker/Queue.cpp
parent313ac7bf57e62ebc0fd0ef1012617b61fb4a952b (diff)
downloadqpid-python-b898761ff46be9bd8de073a4bec260825fdefa47.tar.gz
Fixes to prevent problems with async store when queue is deleted before all messages are completed or dequeued
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@629999 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Queue.cpp')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index d34ca06364..abe4f3f9a5 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -437,7 +437,7 @@ bool Queue::canAutoDelete() const{
bool Queue::enqueue(TransactionContext* ctxt, intrusive_ptr<Message> msg)
{
if (msg->isPersistent() && store) {
- msg->enqueueAsync(this, store); //increment to async counter -- for message sent to more than one queue
+ msg->enqueueAsync(shared_from_this(), store); //increment to async counter -- for message sent to more than one queue
intrusive_ptr<PersistableMessage> pmsg = static_pointer_cast<PersistableMessage>(msg);
store->enqueue(ctxt, pmsg, *this);
return true;
@@ -450,7 +450,7 @@ bool Queue::enqueue(TransactionContext* ctxt, intrusive_ptr<Message> msg)
bool Queue::dequeue(TransactionContext* ctxt, intrusive_ptr<Message> msg)
{
if (msg->isPersistent() && store) {
- msg->dequeueAsync(this, store); //increment to async counter -- for message sent to more than one queue
+ msg->dequeueAsync(shared_from_this(), store); //increment to async counter -- for message sent to more than one queue
intrusive_ptr<PersistableMessage> pmsg = static_pointer_cast<PersistableMessage>(msg);
store->dequeue(ctxt, pmsg, *this);
return true;
@@ -498,7 +498,9 @@ void Queue::destroy()
}
if (store) {
+ store->flush(*this);
store->destroy(*this);
+ store = 0;//ensure we make no more calls to the store for this queue
}
}