Author: tross
Date: Wed Dec  3 08:12:11 2008
New Revision: 722953

URL: http://svn.apache.org/viewvc?rev=722953&view=rev
Log:
QPID-1513 - Fix corner case where incompleted schema records are
            not completed if the agent disconnects mid-startup.

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

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=722953&r1=722952&r2=722953&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp Wed 
Dec  3 08:12:11 2008
@@ -612,7 +612,7 @@
 
     PackageMap::iterator pIter = findOrAddPackageLH(packageName);
     ClassMap::iterator   cIter = pIter->second.find(key);
-    if (cIter == pIter->second.end()) {
+    if (cIter == pIter->second.end() || !cIter->second.hasSchema()) {
         Buffer   outBuffer (outputBuffer, MA_BUFFER_SIZE);
         uint32_t outLen;
         uint32_t sequence = nextRequestSequence++;
@@ -625,6 +625,9 @@
         outBuffer.reset ();
         sendBuffer (outBuffer, outLen, dExchange, replyToKey);
 
+        if (cIter != pIter->second.end())
+            pIter->second.erase(key);
+
         pIter->second.insert(pair<SchemaClassKey, SchemaClass>(key, 
SchemaClass(kind, sequence)));
     }
 }
@@ -697,8 +700,7 @@
             if (length == 0) {
                 QPID_LOG(warning, "Management Broker received invalid schema 
response: " << packageName << "." << key.name);
                 cMap.erase(key);
-            }
-            else {
+            } else {
                 cIter->second.buffer    = (uint8_t*) malloc(length);
                 cIter->second.bufferLen = length;
                 inBuffer.getRawData(cIter->second.buffer, 
cIter->second.bufferLen);


Reply via email to