Author: gsim
Date: Mon Oct 13 11:46:32 2008
New Revision: 704199

URL: http://svn.apache.org/viewvc?rev=704199&view=rev
Log:
Reduce the scope over which lock is held during purge of expired messages.


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=704199&r1=704198&r2=704199&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Mon Oct 13 11:46:32 
2008
@@ -405,15 +405,19 @@
 
 void Queue::purgeExpired()
 {
-    Mutex::ScopedLock locker(messageLock);
-    for (Messages::iterator i = messages.begin(); i != messages.end(); ) {
-        if (i->payload->hasExpired()) {
-            dequeue(0, *i);
-            i = messages.erase(i);
-        } else {
-            ++i;
+    Messages expired;
+    {
+        Mutex::ScopedLock locker(messageLock);
+        for (Messages::iterator i = messages.begin(); i != messages.end();) {
+            if (i->payload->hasExpired()) {
+                expired.push_back(*i);
+                i = messages.erase(i);
+            } else {
+                ++i;
+            }
         }
-    } 
+    }
+    for_each(expired.begin(), expired.end(), bind(&Queue::dequeue, this, 
(TransactionContext*) 0, _1));
 }
 
 /**


Reply via email to