diff options
author | Gordon Sim <gsim@apache.org> | 2008-10-13 18:46:32 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2008-10-13 18:46:32 +0000 |
commit | 56db469f2b6592f8550c54c1f020affc4049e80d (patch) | |
tree | 03839c6076e06240466cdcd9c739c90e732d613c /cpp/src | |
parent | 604b624676c20770d6b6b30be3b2fb357892982e (diff) | |
download | qpid-python-56db469f2b6592f8550c54c1f020affc4049e80d.tar.gz |
Reduce the scope over which lock is held during purge of expired messages.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@704199 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index ccd7c1fa3e..e608ef270b 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -405,15 +405,19 @@ QueuedMessage Queue::get(){ 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)); } /** |