From 2a5070ad796bcdf0a21deaf3b1eac566a8c60543 Mon Sep 17 00:00:00 2001 From: "doil.kwon" Date: Thu, 24 Sep 2015 17:20:12 +0900 Subject: [PATCH] Modify discoveryMap's cancel logic in order to keep data intergrity. - lock guard mutex before erasing data in discoveryMap. Change-Id: I71f2a63797e417148a670a1d9e880d0c2a6515d4 Signed-off-by: doil.kwon Reviewed-on: https://gerrit.iotivity.org/gerrit/3029 Tested-by: jenkins-iotivity Reviewed-by: Madan Lanka (cherry picked from commit 404a997993bfba1289279683f7b6c6534f3a651d) Reviewed-on: https://gerrit.iotivity.org/gerrit/3093 --- .../include/RCSDiscoveryManagerImpl.h | 2 +- .../src/resourceClient/RCSDiscoveryManager.cpp | 2 +- .../src/resourceClient/RCSDiscoveryManagerImpl.cpp | 14 ++++++++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/service/resource-encapsulation/include/RCSDiscoveryManagerImpl.h b/service/resource-encapsulation/include/RCSDiscoveryManagerImpl.h index 391544a..e582ea4 100644 --- a/service/resource-encapsulation/include/RCSDiscoveryManagerImpl.h +++ b/service/resource-encapsulation/include/RCSDiscoveryManagerImpl.h @@ -141,7 +141,7 @@ namespace OIC std::unique_ptr startDiscovery(const RCSAddress& address, const std::string& relativeURI,const std::string& resourceType, RCSDiscoveryManager::ResourceDiscoveredCallback cb); - + void cancel(ID); private: /** diff --git a/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManager.cpp b/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManager.cpp index 5403023..29c794a 100755 --- a/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManager.cpp +++ b/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManager.cpp @@ -68,7 +68,7 @@ namespace OIC { } void RCSDiscoveryManager::DiscoveryTask::cancel(){ - RCSDiscoveryManagerImpl::getInstance()->m_discoveryMap.erase(m_id); + RCSDiscoveryManagerImpl::getInstance()->cancel(m_id); } } } diff --git a/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.cpp b/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.cpp index 0305d3e..bbb29e2 100755 --- a/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.cpp +++ b/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.cpp @@ -60,7 +60,7 @@ namespace OIC void RCSDiscoveryManagerImpl::findCallback(std::shared_ptr< PrimitiveResource > resource, RCSDiscoveryManagerImpl::ID discoverID) { - std::unique_lock lock(m_mutex); + std::lock_guard lock(m_mutex); if(!isDuplicatedCallback(resource,discoverID)) { @@ -142,7 +142,7 @@ namespace OIC void RCSDiscoveryManagerImpl::pollingCallback(unsigned int /*msg*/) { - std::unique_lock lock(m_mutex); + std::lock_guard lock(m_mutex); for(auto it = m_discoveryMap.begin(); it != m_discoveryMap.end(); ++it) { OIC::Service::discoverResource(it->second.m_address,it->second.m_relativeUri+ "?rt=" @@ -156,7 +156,7 @@ namespace OIC { if(ret == OC_STACK_OK || ret == OC_STACK_RESOURCE_CREATED || ret == OC_STACK_RESOURCE_DELETED) { - std::unique_lock lock(m_mutex); + std::lock_guard lock(m_mutex); for(auto it = m_discoveryMap.begin(); it != m_discoveryMap.end(); ++it) { if(!it->second.m_isReceivedFindCallback) @@ -170,7 +170,7 @@ namespace OIC RCSDiscoveryManagerImpl::ID RCSDiscoveryManagerImpl::createId() { - std::unique_lock lock(m_mutex); + std::lock_guard lock(m_mutex); if(s_uniqueId lock(m_mutex); + m_discoveryMap.erase(id); + } } } -- 2.7.4