You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2008/05/19 23:02:16 UTC

svn commit: r657974 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/management: ManagementBroker.cpp ManagementBroker.h

Author: tross
Date: Mon May 19 14:02:15 2008
New Revision: 657974

URL: http://svn.apache.org/viewvc?rev=657974&view=rev
Log:
QPID-1073

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp?rev=657974&r1=657973&r2=657974&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp Mon May 19 14:02:15 2008
@@ -150,7 +150,7 @@
                                   uint32_t                     persistId,
                                   uint32_t                     persistBank)
 {
-    Mutex::ScopedLock lock (userLock);
+    Mutex::ScopedLock lock (addLock);
     uint64_t objectId;
 
     if (persistId == 0)
@@ -167,7 +167,7 @@
         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 @@
     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 @@
         SendBuffer (msgBuffer, contentSize, mExchange, routingKey);
     }
 
+    moveNewObjectsLH();
+
     if (clientWasAdded)
     {
         clientWasAdded = false;
@@ -638,6 +650,8 @@
     FieldTable           ft;
     FieldTable::ValuePtr value;
 
+    moveNewObjectsLH();
+
     ft.decode (inBuffer);
     value = ft.get ("_class");
     if (value->empty () || !value->convertsTo<string> ())

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.h?rev=657974&r1=657973&r2=657974&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.h Mon May 19 14:02:15 2008
@@ -139,11 +139,13 @@
     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 @@
                              uint32_t                     length,
                              broker::Exchange::shared_ptr exchange,
                              std::string                  routingKey);
+    void moveNewObjectsLH();
 
     void dispatchMethodLH (broker::Message&   msg,
                            const std::string& routingKey,