summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/management/ManagementBroker.cpp18
-rw-r--r--cpp/src/qpid/management/ManagementBroker.h3
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,