Author: tross
Date: Fri Jun  6 13:14:09 2008
New Revision: 664112

URL: http://svn.apache.org/viewvc?rev=664112&view=rev
Log:
Added mutexes back in to protect management counts from corruption

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementObject.h

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=664112&r1=664111&r2=664112&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Fri Jun  6 13:14:09 
2008
@@ -127,15 +127,17 @@
     } else {
         // if no store then mark as enqueued
         if (!enqueue(0, msg)){
-            push(msg);
-            msg->enqueueComplete();
             if (mgmtObject.get() != 0) {
+                Mutex::ScopedLock mutex(mgmtObject->getLock());
                 mgmtObject->inc_msgTotalEnqueues ();
                 mgmtObject->inc_byteTotalEnqueues (msg->contentSize ());
                 mgmtObject->inc_msgDepth ();
             }
+            push(msg);
+            msg->enqueueComplete();
         }else {
             if (mgmtObject.get() != 0) {
+                Mutex::ScopedLock mutex(mgmtObject->getLock());
                 mgmtObject->inc_msgTotalEnqueues ();
                 mgmtObject->inc_byteTotalEnqueues (msg->contentSize ());
                 mgmtObject->inc_msgDepth ();
@@ -153,6 +155,7 @@
     push(msg);
     msg->enqueueComplete(); // mark the message as enqueued
     if (mgmtObject.get() != 0) {
+        Mutex::ScopedLock mutex(mgmtObject->getLock());
         mgmtObject->inc_msgTotalEnqueues ();
         mgmtObject->inc_byteTotalEnqueues (msg->contentSize ());
         mgmtObject->inc_msgPersistEnqueues ();
@@ -170,6 +173,7 @@
 void Queue::process(boost::intrusive_ptr<Message>& msg){
     push(msg);
     if (mgmtObject.get() != 0) {
+        Mutex::ScopedLock mutex(mgmtObject->getLock());
         mgmtObject->inc_msgTotalEnqueues ();
         mgmtObject->inc_byteTotalEnqueues (msg->contentSize ());
         mgmtObject->inc_msgTxnEnqueues ();
@@ -359,6 +363,7 @@
     consumerCount++;
 
     if (mgmtObject.get() != 0){
+        Mutex::ScopedLock mutex(mgmtObject->getLock());
         mgmtObject->inc_consumerCount ();
     }
 }
@@ -369,6 +374,7 @@
     consumerCount--;
     if(exclusive) exclusive = 0;
     if (mgmtObject.get() != 0){
+        Mutex::ScopedLock mutex(mgmtObject->getLock());
         mgmtObject->dec_consumerCount ();
     }
 }
@@ -407,6 +413,7 @@
 
     if (policy.get()) policy->dequeued(msg.payload->contentSize());
     if (mgmtObject.get() != 0){
+        Mutex::ScopedLock mutex(mgmtObject->getLock());
         mgmtObject->inc_msgTotalDequeues  ();
         mgmtObject->inc_byteTotalDequeues (msg.payload->contentSize());
         mgmtObject->dec_msgDepth ();

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementObject.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementObject.h?rev=664112&r1=664111&r2=664112&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementObject.h 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementObject.h Fri 
Jun  6 13:14:09 2008
@@ -112,8 +112,8 @@
         destroyTime = uint64_t (qpid::sys::Duration (qpid::sys::now ()));
         deleted     = true;
     }
-    bool isDeleted (void) { return deleted; }
-    sys::Mutex& getLock() { return accessLock; }
+    inline bool isDeleted (void) { return deleted; }
+    inline sys::Mutex& getLock() { return accessLock; }
 };
 
 typedef std::map<uint64_t,ManagementObject::shared_ptr> ManagementObjectMap;


Reply via email to