diff options
| author | Alan Conway <aconway@apache.org> | 2012-10-18 19:42:06 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2012-10-18 19:42:06 +0000 |
| commit | 1e9edf236ef6bb2029c17b665d90edebe334b92a (patch) | |
| tree | bb5e54973fe4789bb6ac5f195265e714131e5336 /cpp | |
| parent | 8a197cb7ecec3e9d83a7194373afbb6f00282dfc (diff) | |
| download | qpid-python-1e9edf236ef6bb2029c17b665d90edebe334b92a.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/qpid@1399812 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 10 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/Queue.h | 3 |
2 files changed, 7 insertions, 6 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index 9dc9ec7a6d..f1288ae59e 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/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/cpp/src/qpid/broker/Queue.h b/cpp/src/qpid/broker/Queue.h index 32e9201b5b..3fa8391d46 100644 --- a/cpp/src/qpid/broker/Queue.h +++ b/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; |
