From c110d4ee7d963d8682c261c663d040a141f38726 Mon Sep 17 00:00:00 2001 From: YounghyunJoo Date: Mon, 29 Aug 2016 21:56:43 +0900 Subject: [PATCH] Modify consumer logic for updating provider information - 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 Reviewed-on: https://gerrit.iotivity.org/gerrit/11055 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- .../notification/src/consumer/NSConsumerInternalTaskController.c | 7 +++++++ service/notification/src/consumer/NSConsumerMemoryCache.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/service/notification/src/consumer/NSConsumerInternalTaskController.c b/service/notification/src/consumer/NSConsumerInternalTaskController.c index 1b8068d..af1f705 100644 --- a/service/notification/src/consumer/NSConsumerInternalTaskController.c +++ b/service/notification/src/consumer/NSConsumerInternalTaskController.c @@ -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) diff --git a/service/notification/src/consumer/NSConsumerMemoryCache.h b/service/notification/src/consumer/NSConsumerMemoryCache.h index 76ab968..130e78a 100644 --- a/service/notification/src/consumer/NSConsumerMemoryCache.h +++ b/service/notification/src/consumer/NSConsumerMemoryCache.h @@ -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); -- 2.7.4