Fix unregistering agents on contextClosed event 42/31742/6
authorAdam Malinowski <a.malinowsk2@partner.samsung.com>
Tue, 9 Dec 2014 08:56:06 +0000 (09:56 +0100)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 29 Dec 2014 08:21:36 +0000 (00:21 -0800)
Also:
* fix agent talkers removing
* optimize check requests removing

Change-Id: I0f0251783f00a90a5e3004638b08878255251eb8

src/service/agent/AgentManager.cpp
src/service/request/CheckRequestManager.cpp

index d551790..7c8d4be 100644 (file)
@@ -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);
 }
 
index 8090f47..06ae4ea 100644 (file)
@@ -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);
+        }
     }
 }