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));
}
/**