replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / resourceCache / src / ResourceCacheManager.cpp
index c57c7f0..e572575 100644 (file)
 #include "RCSException.h"
 #include "ocrandom.h"
 
+#include "ScopeLogger.h"
+
+#define TAG PCF("RCSResourceCacheManager")
+
 namespace OIC
 {
     namespace Service
@@ -59,6 +63,8 @@ namespace OIC
             PrimitiveResourcePtr pResource, CacheCB func, CACHE_METHOD cm,
             REPORT_FREQUENCY rf, long reportTime)
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             if (pResource == nullptr)
             {
                 throw RCSInvalidParameterException {"[requestResourceCache] Primitive Resource is invaild"};
@@ -109,6 +115,8 @@ namespace OIC
                 newHandler->initializeDataCache(pResource);
                 s_cacheDataList->push_back(newHandler);
             }
+
+            std::lock_guard<std::mutex> lock(s_mutex);
             retID = newHandler->addSubscriber(func, rf, reportTime);
 
             cacheIDmap.insert(std::make_pair(retID, newHandler));
@@ -118,17 +126,31 @@ namespace OIC
 
         void ResourceCacheManager::cancelResourceCache(CacheID id)
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+            std::lock_guard<std::mutex> lock(s_mutex);
+
             auto observeIns = observeCacheIDmap.find(id);
             auto dataCacheIns = cacheIDmap.find(id);
             if ((dataCacheIns == cacheIDmap.end() && observeIns == observeCacheIDmap.end())
                 || id == 0)
             {
+                lock.~lock_guard();
                 throw RCSInvalidParameterException {"[cancelResourceCache] CacheID is invaild"};
             }
 
             if (observeIns != observeCacheIDmap.end())
             {
-                (observeIns->second)->stopCache();
+                try
+                {
+                    (observeIns->second)->stopCache();
+                }
+                catch (...)
+                {
+                    (observeIns->second).reset();
+                    observeCacheIDmap.erase(observeIns);
+                    lock.~lock_guard();
+                    throw;
+                }
                 (observeIns->second).reset();
                 observeCacheIDmap.erase(observeIns);
                 return;
@@ -142,7 +164,6 @@ namespace OIC
                 {
                     cacheIDmap.erase(id);
                 }
-                std::lock_guard<std::mutex> lock(s_mutex);
                 if (foundCacheHandler->isEmptySubscriber())
                 {
                     s_cacheDataList->remove(foundCacheHandler);
@@ -152,6 +173,8 @@ namespace OIC
 
         void ResourceCacheManager::updateResourceCache(CacheID updateId) const
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             if (updateId == 0)
             {
                 throw RCSInvalidParameterException {"[getCachedData] CacheID is NULL"};
@@ -167,6 +190,8 @@ namespace OIC
 
         const RCSResourceAttributes ResourceCacheManager::getCachedData(CacheID id) const
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             if (id == 0)
             {
                 throw RCSInvalidParameterException {"[getCachedData] CacheID is NULL"};
@@ -194,6 +219,8 @@ namespace OIC
 
         CACHE_STATE ResourceCacheManager::getResourceCacheState(CacheID id) const
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             if (id == 0)
             {
                 throw RCSInvalidParameterException {"[getResourceCacheState] CacheID is NULL"};
@@ -215,6 +242,8 @@ namespace OIC
 
         bool ResourceCacheManager::isCachedData(CacheID id) const
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             if (id == 0)
             {
                 throw RCSInvalidParameterException {"[isCachedData] CacheID is NULL"};
@@ -236,6 +265,8 @@ namespace OIC
 
         void ResourceCacheManager::initializeResourceCacheManager()
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             std::lock_guard<std::mutex> lock(s_mutex);
             if (s_cacheDataList == nullptr)
             {
@@ -246,6 +277,8 @@ namespace OIC
 
         DataCachePtr ResourceCacheManager::findDataCache(PrimitiveResourcePtr pResource) const
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             DataCachePtr retHandler = nullptr;
             std::lock_guard<std::mutex> lock(s_mutex);
             for (auto &i : * s_cacheDataList)
@@ -262,6 +295,8 @@ namespace OIC
 
         DataCachePtr ResourceCacheManager::findDataCache(CacheID id) const
         {
+            SCOPE_LOG_F(DEBUG, TAG);
+
             DataCachePtr retHandler = nullptr;
             for (auto it : cacheIDmap)
             {