diff options
| author | Gordon Sim <gsim@apache.org> | 2013-05-24 10:24:38 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-05-24 10:24:38 +0000 |
| commit | 92bf4a15a0d145251b602bff1fd7eefc310371a7 (patch) | |
| tree | b91ff7a6b6ed6ab6c80d13abdce2a93f5bf623fa /qpid/cpp/src | |
| parent | 4b94b9bdc87816ed8425bafab7917095bba9b38b (diff) | |
| download | qpid-python-92bf4a15a0d145251b602bff1fd7eefc310371a7.tar.gz | |
QPID-4859: prevent circular reference on queues still holding durable messages
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1485995 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/broker/IngressCompletion.cpp | 5 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/broker/IngressCompletion.h | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/broker/IngressCompletion.cpp b/qpid/cpp/src/qpid/broker/IngressCompletion.cpp index 5affd2b940..51eafb8d86 100644 --- a/qpid/cpp/src/qpid/broker/IngressCompletion.cpp +++ b/qpid/cpp/src/qpid/broker/IngressCompletion.cpp @@ -39,7 +39,10 @@ void IngressCompletion::flush() queues.swap(copy); } for (Queues::const_iterator i = copy.begin(); i != copy.end(); ++i) { - (*i)->flush(); + boost::shared_ptr<Queue> q(i->lock()); + if (q) { + q->flush(); + } } } }} // namespace qpid::broker diff --git a/qpid/cpp/src/qpid/broker/IngressCompletion.h b/qpid/cpp/src/qpid/broker/IngressCompletion.h index 6fdbb12aa1..28bb9cf03d 100644 --- a/qpid/cpp/src/qpid/broker/IngressCompletion.h +++ b/qpid/cpp/src/qpid/broker/IngressCompletion.h @@ -24,6 +24,7 @@ #include "AsyncCompletion.h" #include "qpid/sys/Mutex.h" #include <boost/shared_ptr.hpp> +#include <boost/weak_ptr.hpp> #include <vector> namespace qpid { @@ -42,7 +43,7 @@ class IngressCompletion : public AsyncCompletion void enqueueAsync(boost::shared_ptr<Queue>); void flush(); private: - typedef std::vector<boost::shared_ptr<Queue> > Queues; + typedef std::vector<boost::weak_ptr<Queue> > Queues; Queues queues; qpid::sys::Mutex lock; }; |
