summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-05-19 21:02:15 +0000
committerTed Ross <tross@apache.org>2008-05-19 21:02:15 +0000
commit96024622ccfcc8fdd24b3c9ace44f7c8849fac46 (patch)
treea2c0bb22360a972f0f2e313f888f3019bf3d4429 /cpp/src
parent5dae50b76eb27c9d9b8e28bc13bded8ae5b61cb3 (diff)
downloadqpid-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.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,