diff options
Diffstat (limited to 'qpid/cpp')
-rw-r--r-- | qpid/cpp/managementgen/templates/Class.h | 2 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/Queue.cpp | 7 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/management/ManagementObject.h | 4 |
3 files changed, 11 insertions, 2 deletions
diff --git a/qpid/cpp/managementgen/templates/Class.h b/qpid/cpp/managementgen/templates/Class.h index cff915412e..6a54b2131c 100644 --- a/qpid/cpp/managementgen/templates/Class.h +++ b/qpid/cpp/managementgen/templates/Class.h @@ -22,6 +22,7 @@ /*MGEN:Root.Disclaimer*/ +#include "qpid/sys/Mutex.h" #include "qpid/management/ManagementObject.h" namespace qpid { @@ -52,6 +53,7 @@ class /*MGEN:Class.NameCap*/ : public ManagementObject public: typedef boost::shared_ptr</*MGEN:Class.NameCap*/> shared_ptr; + qpid::sys::Mutex accessorLock; /*MGEN:Class.NameCap*/ (Manageable* coreObject, Manageable* parentObject, /*MGEN:Class.ConstructorArgs*/); diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp index e2fd998cc0..a5384014d8 100644 --- a/qpid/cpp/src/qpid/broker/Queue.cpp +++ b/qpid/cpp/src/qpid/broker/Queue.cpp @@ -97,6 +97,7 @@ void Queue::deliver(intrusive_ptr<Message>& msg){ push(msg); msg->enqueueComplete(); if (mgmtObject.get() != 0) { + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->inc_msgTotalEnqueues (); mgmtObject->inc_byteTotalEnqueues (msg->contentSize ()); mgmtObject->inc_msgDepth (); @@ -104,6 +105,7 @@ void Queue::deliver(intrusive_ptr<Message>& msg){ } }else { if (mgmtObject.get() != 0) { + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->inc_msgTotalEnqueues (); mgmtObject->inc_byteTotalEnqueues (msg->contentSize ()); mgmtObject->inc_msgDepth (); @@ -122,6 +124,7 @@ void Queue::recover(intrusive_ptr<Message>& msg){ push(msg); msg->enqueueComplete(); // mark the message as enqueued if (mgmtObject.get() != 0) { + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->inc_msgTotalEnqueues (); mgmtObject->inc_byteTotalEnqueues (msg->contentSize ()); mgmtObject->inc_msgPersistEnqueues (); @@ -140,6 +143,7 @@ void Queue::recover(intrusive_ptr<Message>& msg){ void Queue::process(intrusive_ptr<Message>& msg){ push(msg); if (mgmtObject.get() != 0) { + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->inc_msgTotalEnqueues (); mgmtObject->inc_byteTotalEnqueues (msg->contentSize ()); mgmtObject->inc_msgTxnEnqueues (); @@ -323,6 +327,7 @@ void Queue::consume(Consumer&, bool requestExclusive){ consumerCount++; if (mgmtObject.get() != 0){ + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->inc_consumers (); } } @@ -333,6 +338,7 @@ void Queue::cancel(Consumer& c){ consumerCount--; if(exclusive) exclusive = false; if (mgmtObject.get() != 0){ + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->dec_consumers (); } } @@ -363,6 +369,7 @@ void Queue::pop(){ if (policy.get()) policy->dequeued(msg.payload->contentSize()); if (mgmtObject.get() != 0){ + Mutex::ScopedLock alock(mgmtObject->accessorLock); mgmtObject->inc_msgTotalDequeues (); mgmtObject->inc_byteTotalDequeues (msg.payload->contentSize()); mgmtObject->dec_msgDepth (); diff --git a/qpid/cpp/src/qpid/management/ManagementObject.h b/qpid/cpp/src/qpid/management/ManagementObject.h index a8ba231419..ff136c397d 100644 --- a/qpid/cpp/src/qpid/management/ManagementObject.h +++ b/qpid/cpp/src/qpid/management/ManagementObject.h @@ -54,8 +54,8 @@ class ManagementObject static const uint8_t TYPE_LSTR = 7; static const uint8_t ACCESS_RC = 1; - static const uint8_t ACCESS_RW = 1; - static const uint8_t ACCESS_RO = 1; + static const uint8_t ACCESS_RW = 2; + static const uint8_t ACCESS_RO = 3; static const uint8_t DIR_I = 1; static const uint8_t DIR_O = 2; |