Author: aconway
Date: Thu Oct 18 19:42:06 2012
New Revision: 1399812

URL: http://svn.apache.org/viewvc?rev=1399812&view=rev
Log:
Bug 867030 - QPID-4374: Reduce contention on Queue::messageLock (Jason Dillaman)

Introduce a separate lock for Queue::UsageBarrier.

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

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=1399812&r1=1399811&r2=1399812&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Thu Oct 18 19:42:06 2012
@@ -1576,7 +1576,7 @@ Queue::UsageBarrier::UsageBarrier(Queue&
 
 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();
 }
 
 }}

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h?rev=1399812&r1=1399811&r2=1399812&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h Thu Oct 18 19:42:06 2012
@@ -83,6 +83,7 @@ class Queue : public boost::enable_share
     {
         Queue& parent;
         uint count;
+        qpid::sys::Monitor usageLock;
 
         UsageBarrier(Queue&);
         bool acquire();
@@ -141,7 +142,7 @@ class Queue : public boost::enable_share
      *     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;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to