Author: kgiusti
Date: Tue May  3 22:13:52 2011
New Revision: 1099283

URL: http://svn.apache.org/viewvc?rev=1099283&view=rev
Log:
QPID-3244: C++ broker should release flow control for a queue when it is 
deleted.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.h

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.cpp?rev=1099283&r1=1099282&r2=1099283&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.cpp Tue May  3 22:13:52 
2011
@@ -120,6 +120,21 @@ QueueFlowLimit::QueueFlowLimit(Queue *_q
 }
 
 
+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)
 {

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.h?rev=1099283&r1=1099282&r2=1099283&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/QueueFlowLimit.h Tue May  3 22:13:52 
2011
@@ -78,7 +78,7 @@ class Broker;
     static QPID_BROKER_EXTERN const std::string flowStopSizeKey;
     static QPID_BROKER_EXTERN const std::string flowResumeSizeKey;
 
-    virtual ~QueueFlowLimit() {}
+    virtual ~QueueFlowLimit();
 
     /** the queue has added QueuedMessage.  Returns true if flow state changes 
*/
     QPID_BROKER_EXTERN void enqueued(const QueuedMessage&);



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to