diff options
author | Ted Ross <tross@apache.org> | 2008-05-19 21:02:15 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2008-05-19 21:02:15 +0000 |
commit | 96024622ccfcc8fdd24b3c9ace44f7c8849fac46 (patch) | |
tree | a2c0bb22360a972f0f2e313f888f3019bf3d4429 /cpp/src | |
parent | 5dae50b76eb27c9d9b8e28bc13bded8ae5b61cb3 (diff) | |
download | qpid-python-96024622ccfcc8fdd24b3c9ace44f7c8849fac46.tar.gz |
QPID-1073
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@657974 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/management/ManagementBroker.cpp | 18 | ||||
-rw-r--r-- | cpp/src/qpid/management/ManagementBroker.h | 3 |
2 files changed, 19 insertions, 2 deletions
diff --git a/cpp/src/qpid/management/ManagementBroker.cpp b/cpp/src/qpid/management/ManagementBroker.cpp index ec7db7eb80..0ddbd62350 100644 --- a/cpp/src/qpid/management/ManagementBroker.cpp +++ b/cpp/src/qpid/management/ManagementBroker.cpp @@ -150,7 +150,7 @@ void ManagementBroker::addObject (ManagementObject::shared_ptr object, uint32_t persistId, uint32_t persistBank) { - Mutex::ScopedLock lock (userLock); + Mutex::ScopedLock lock (addLock); uint64_t objectId; if (persistId == 0) @@ -167,7 +167,7 @@ void ManagementBroker::addObject (ManagementObject::shared_ptr object, objectId = ((uint64_t) persistBank) << 24 | persistId; object->setObjectId (objectId); - managementObjects[objectId] = object; + newManagementObjects[objectId] = object; } ManagementBroker::Periodic::Periodic (ManagementBroker& _broker, uint32_t _seconds) @@ -242,6 +242,16 @@ void ManagementBroker::SendBuffer (Buffer& buf, exchange->route (deliverable, routingKey, 0); } +void ManagementBroker::moveNewObjectsLH() +{ + Mutex::ScopedLock lock (addLock); + for (ManagementObjectMap::iterator iter = newManagementObjects.begin (); + iter != newManagementObjects.end (); + iter++) + managementObjects[iter->first] = iter->second; + newManagementObjects.clear(); +} + void ManagementBroker::PeriodicProcessing (void) { #define BUFSIZE 65536 @@ -262,6 +272,8 @@ void ManagementBroker::PeriodicProcessing (void) SendBuffer (msgBuffer, contentSize, mExchange, routingKey); } + moveNewObjectsLH(); + if (clientWasAdded) { clientWasAdded = false; @@ -638,6 +650,8 @@ void ManagementBroker::handleGetQueryLH (Buffer& inBuffer, string replyToKey, ui FieldTable ft; FieldTable::ValuePtr value; + moveNewObjectsLH(); + ft.decode (inBuffer); value = ft.get ("_class"); if (value->empty () || !value->convertsTo<string> ()) diff --git a/cpp/src/qpid/management/ManagementBroker.h b/cpp/src/qpid/management/ManagementBroker.h index 70d39c0ca8..7548773960 100644 --- a/cpp/src/qpid/management/ManagementBroker.h +++ b/cpp/src/qpid/management/ManagementBroker.h @@ -139,11 +139,13 @@ class ManagementBroker : public ManagementAgent RemoteAgentMap remoteAgents; PackageMap packages; ManagementObjectMap managementObjects; + ManagementObjectMap newManagementObjects; static shared_ptr agent; static bool enabled; framing::Uuid uuid; + sys::Mutex addLock; sys::Mutex userLock; broker::Timer timer; broker::Exchange::shared_ptr mExchange; @@ -169,6 +171,7 @@ class ManagementBroker : public ManagementAgent uint32_t length, broker::Exchange::shared_ptr exchange, std::string routingKey); + void moveNewObjectsLH(); void dispatchMethodLH (broker::Message& msg, const std::string& routingKey, |