diff options
Diffstat (limited to 'cpp/src/qpid/broker/QueueFlowLimit.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/QueueFlowLimit.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/cpp/src/qpid/broker/QueueFlowLimit.cpp b/cpp/src/qpid/broker/QueueFlowLimit.cpp index 9f1d3b65f8..b2e2e54bdf 100644 --- a/cpp/src/qpid/broker/QueueFlowLimit.cpp +++ b/cpp/src/qpid/broker/QueueFlowLimit.cpp @@ -120,6 +120,21 @@ QueueFlowLimit::QueueFlowLimit(Queue *_queue, } +QueueFlowLimit::~QueueFlowLimit() +{ + sys::Mutex::ScopedLock l(indexLock); + if (!index.empty()) { + // we're gone - release all pending msgs + for (std::map<framing::SequenceNumber, boost::intrusive_ptr<Message> >::iterator itr = index.begin(); + itr != index.end(); ++itr) + if (itr->second) + try { + itr->second->getIngressCompletion().finishCompleter(); + } catch (...) {} // ignore - not safe for a destructor to throw. + index.clear(); + } +} + void QueueFlowLimit::enqueued(const QueuedMessage& msg) { |
