summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2012-10-18 19:42:06 +0000
committerAlan Conway <aconway@apache.org>2012-10-18 19:42:06 +0000
commitde19e4371da8cffadfea19d862c019c31c62a018 (patch)
tree03541e83a08de80edd2c99c71287e8c49106725a /qpid/cpp/src
parent9b33e6c1e94f406c6c05ba90718ff4805c3e52ed (diff)
downloadqpid-python-de19e4371da8cffadfea19d862c019c31c62a018.tar.gz
Bug 867030 - QPID-4374: Reduce contention on Queue::messageLock (Jason Dillaman)
Introduce a separate lock for Queue::UsageBarrier. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1399812 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/Queue.cpp10
-rw-r--r--qpid/cpp/src/qpid/broker/Queue.h3
2 files changed, 7 insertions, 6 deletions
diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp
index 9dc9ec7a6d..f1288ae59e 100644
--- a/qpid/cpp/src/qpid/broker/Queue.cpp
+++ b/qpid/cpp/src/qpid/broker/Queue.cpp
@@ -1576,7 +1576,7 @@ Queue::UsageBarrier::UsageBarrier(Queue& q) : parent(q), count(0) {}
bool Queue::UsageBarrier::acquire()
{
- Monitor::ScopedLock l(parent.messageLock); /** @todo: use a dedicated lock instead of messageLock */
+ Monitor::ScopedLock l(usageLock);
if (parent.deleted) {
return false;
} else {
@@ -1587,15 +1587,15 @@ bool Queue::UsageBarrier::acquire()
void Queue::UsageBarrier::release()
{
- Monitor::ScopedLock l(parent.messageLock);
- if (--count == 0) parent.messageLock.notifyAll();
+ Monitor::ScopedLock l(usageLock);
+ if (--count == 0) usageLock.notifyAll();
}
void Queue::UsageBarrier::destroy()
{
- Monitor::ScopedLock l(parent.messageLock);
+ Monitor::ScopedLock l(usageLock);
parent.deleted = true;
- while (count) parent.messageLock.wait();
+ while (count) usageLock.wait();
}
}}
diff --git a/qpid/cpp/src/qpid/broker/Queue.h b/qpid/cpp/src/qpid/broker/Queue.h
index 32e9201b5b..3fa8391d46 100644
--- a/qpid/cpp/src/qpid/broker/Queue.h
+++ b/qpid/cpp/src/qpid/broker/Queue.h
@@ -83,6 +83,7 @@ class Queue : public boost::enable_shared_from_this<Queue>,
{
Queue& parent;
uint count;
+ qpid::sys::Monitor usageLock;
UsageBarrier(Queue&);
bool acquire();
@@ -141,7 +142,7 @@ class Queue : public boost::enable_shared_from_this<Queue>,
* o consumerCount (TBD: move under separate lock)
* o Queue::UsageBarrier (TBD: move under separate lock)
*/
- mutable qpid::sys::Monitor messageLock;
+ mutable qpid::sys::Mutex messageLock;
mutable qpid::sys::Mutex ownershipLock;
mutable uint64_t persistenceId;
const QueueSettings settings;