From e8b68f17f299c52e067acd21e7e6fd8b5c3d346d Mon Sep 17 00:00:00 2001 From: Adam Malinowski Date: Tue, 9 Dec 2014 09:56:06 +0100 Subject: [PATCH] Fix unregistering agents on contextClosed event Also: * fix agent talkers removing * optimize check requests removing Change-Id: I0f0251783f00a90a5e3004638b08878255251eb8 --- src/service/agent/AgentManager.cpp | 20 +++++++++++++------- src/service/request/CheckRequestManager.cpp | 8 +++++--- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/service/agent/AgentManager.cpp b/src/service/agent/AgentManager.cpp index d551790..7c8d4be 100644 --- a/src/service/agent/AgentManager.cpp +++ b/src/service/agent/AgentManager.cpp @@ -101,19 +101,25 @@ AgentTalkerPtr AgentManager::getTalker(const LinkId &linkId, ProtocolFrameSequen } void AgentManager::removeTalker(const AgentTalkerPtr &agentTalker) { - m_talkers[agentTalker->linkId()].erase(agentTalker->checkId()); + auto it = m_talkers.find(agentTalker->linkId()); + if (it != m_talkers.end()) { + it->second.erase(agentTalker->checkId()); + if (it->second.empty()) { + m_talkers.erase(it); + } + } } void AgentManager::cleanupAgent(const LinkId &linkId, TalkerCleanupFunction cleanupFunction) { auto talkerMap = m_talkers.find(linkId); - if (talkerMap == m_talkers.end()) - return; - - if (cleanupFunction) { - for (auto p : talkerMap->second) { - cleanupFunction(p.second); + if (talkerMap != m_talkers.end()) { + if (cleanupFunction) { + for (auto p : talkerMap->second) { + cleanupFunction(p.second); + } } } + unregisterAgent(linkId); } diff --git a/src/service/request/CheckRequestManager.cpp b/src/service/request/CheckRequestManager.cpp index 8090f47..06ae4ea 100644 --- a/src/service/request/CheckRequestManager.cpp +++ b/src/service/request/CheckRequestManager.cpp @@ -68,10 +68,12 @@ CheckContextPtr CheckRequestManager::getContext(const AgentTalkerPtr &talker) { } void CheckRequestManager::removeRequest(const CheckContextPtr &checkContextPtr) { - m_checks[checkContextPtr->m_requestContext->responseQueue()].erase(checkContextPtr->m_checkId); auto it = m_checks.find(checkContextPtr->m_requestContext->responseQueue()); - if (it->second.empty()) { - m_checks.erase(it); + if (it != m_checks.end()) { + it->second.erase(checkContextPtr->m_checkId); + if (it->second.empty()) { + m_checks.erase(it); + } } } -- 2.7.4