From 778f7637bea8a154cc05579e80b5ac14ed4bd2da Mon Sep 17 00:00:00 2001 From: Ted Ross Date: Wed, 3 Dec 2008 16:12:11 +0000 Subject: QPID-1513 - Fix corner case where incompleted schema records are not completed if the agent disconnects mid-startup. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@722953 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/management/ManagementBroker.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/management/ManagementBroker.cpp b/qpid/cpp/src/qpid/management/ManagementBroker.cpp index 7a092bbb1b..7082859948 100644 --- a/qpid/cpp/src/qpid/management/ManagementBroker.cpp +++ b/qpid/cpp/src/qpid/management/ManagementBroker.cpp @@ -612,7 +612,7 @@ void ManagementBroker::handleClassIndLH (Buffer& inBuffer, string replyToKey, ui 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 @@ void ManagementBroker::handleClassIndLH (Buffer& inBuffer, string replyToKey, ui outBuffer.reset (); sendBuffer (outBuffer, outLen, dExchange, replyToKey); + if (cIter != pIter->second.end()) + pIter->second.erase(key); + pIter->second.insert(pair(key, SchemaClass(kind, sequence))); } } @@ -697,8 +700,7 @@ void ManagementBroker::handleSchemaResponseLH(Buffer& inBuffer, string /*replyTo 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); -- cgit v1.2.1