From f5720e56cb7133d0b3eb81b19f6fb1e334d7485f Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Fri, 24 May 2013 10:24:38 +0000 Subject: QPID-4859: prevent circular reference on queues still holding durable messages git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1485995 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/IngressCompletion.cpp | 5 ++++- cpp/src/qpid/broker/IngressCompletion.h | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'cpp') diff --git a/cpp/src/qpid/broker/IngressCompletion.cpp b/cpp/src/qpid/broker/IngressCompletion.cpp index 5affd2b940..51eafb8d86 100644 --- a/cpp/src/qpid/broker/IngressCompletion.cpp +++ b/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 q(i->lock()); + if (q) { + q->flush(); + } } } }} // namespace qpid::broker diff --git a/cpp/src/qpid/broker/IngressCompletion.h b/cpp/src/qpid/broker/IngressCompletion.h index 6fdbb12aa1..28bb9cf03d 100644 --- a/cpp/src/qpid/broker/IngressCompletion.h +++ b/cpp/src/qpid/broker/IngressCompletion.h @@ -24,6 +24,7 @@ #include "AsyncCompletion.h" #include "qpid/sys/Mutex.h" #include +#include #include namespace qpid { @@ -42,7 +43,7 @@ class IngressCompletion : public AsyncCompletion void enqueueAsync(boost::shared_ptr); void flush(); private: - typedef std::vector > Queues; + typedef std::vector > Queues; Queues queues; qpid::sys::Mutex lock; }; -- cgit v1.2.1