Modify consumer logic for updating provider information
authorYounghyunJoo <yh_.joo@samsung.com>
Mon, 29 Aug 2016 12:56:43 +0000 (21:56 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 2 Sep 2016 05:14:48 +0000 (05:14 +0000)
- Add synchronization logic for cache update in NSConsumerInternalTaskController.
- Adapt its synchronization logic, when subscription succeed is checked/updated.

Change-Id: I746a3d3602eab3ac570a6d2ddfcdd4b7dce8e18a
Signed-off-by: YounghyunJoo <yh_.joo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/11055
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/consumer/NSConsumerInternalTaskController.c
service/notification/src/consumer/NSConsumerMemoryCache.h

index 1b8068d..af1f705 100644 (file)
@@ -326,6 +326,11 @@ void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider)
 
     NSCacheElement * cacheElement = NSStorageRead(ProviderCache, provider->providerId);
     NS_VERIFY_NOT_NULL_V(cacheElement);
+
+    pthread_mutex_t * mutex = NSGetCacheMutex();
+    pthread_mutex_lock(mutex);
+
+    NS_VERIFY_NOT_NULL_V(cacheElement);
     NSProvider_internal * prov = (NSProvider_internal *)cacheElement->data;
     NSProviderConnectionInfo *infos = prov->connection;
     while(infos)
@@ -333,6 +338,8 @@ void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider)
         infos->isSubscribing = true;
         infos = infos->next;
     }
+
+    pthread_mutex_unlock(mutex);
 }
 
 void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
index 76ab968..130e78a 100644 (file)
@@ -31,8 +31,10 @@ extern "C" {
 #include "NSStorageAdapter.h"
 #include "NSConsumerCommon.h"
 
+pthread_mutex_t * NSGetCacheMutex();
 
 bool NSConsumerCompareIdCacheData(NSCacheType type, void * data, const char * id);
+
 NSResult NSConsumerCacheWriteMessage(NSCacheList * list, NSCacheElement * newObj);
 NSResult NSConsumerCacheWriteProvider(NSCacheList * list, NSCacheElement * newObj);
 NSCacheElement * NSPopProviderCacheList(NSCacheList * list);