From: KIM JungYong Date: Mon, 29 Aug 2016 12:20:43 +0000 (+0900) Subject: Fix bug for storage update to provider. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c48b69e68a21f657cd8b77025f184e47c0895e81;p=contrib%2Fiotivity.git Fix bug for storage update to provider. The provider will update two type of information, one of information is connection information, and others is topic list. It is problem that whole infomation was updated although just one of information updated. In this patch, update logic is seperated updating infomation. Change-Id: I0fe1062791ac43fadadbba04311b903c44678a1e Signed-off-by: KIM JungYong Reviewed-on: https://gerrit.iotivity.org/gerrit/11047 Reviewed-by: Uze Choi Tested-by: jenkins-iotivity --- diff --git a/service/notification/src/consumer/NSConsumerInternalTaskController.c b/service/notification/src/consumer/NSConsumerInternalTaskController.c index 7935b92..505d414 100644 --- a/service/notification/src/consumer/NSConsumerInternalTaskController.c +++ b/service/notification/src/consumer/NSConsumerInternalTaskController.c @@ -235,6 +235,13 @@ void NSConsumerHandleProviderDiscovered(NSProvider_internal * provider) bool isAdded = true; bool isSubscribing = false; + + NSProvider_internal * providerCacheDataFromAddr + = NSFindProviderFromAddr(provider->connection->addr); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V( + (providerCacheDataFromAddr == NULL) ? (void *)1 : NULL, + NSRemoveProvider_internal(providerCacheDataFromAddr)); + NSProvider_internal * providerCacheData = NSProviderCacheFind(provider->providerId); if (providerCacheData == NULL) @@ -307,8 +314,17 @@ void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider) { NS_VERIFY_NOT_NULL_V(provider); - NSResult ret = NSProviderCacheUpdate(provider); - NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL); + NSCacheList * ProviderCache = *(NSGetProviderCacheList()); + + NSCacheElement * cacheElement = NSStorageRead(ProviderCache, provider->providerId); + NS_VERIFY_NOT_NULL_V(cacheElement); + NSProvider_internal * prov = (NSProvider_internal *)cacheElement->data; + NSProviderConnectionInfo *infos = prov->connection; + while(infos) + { + infos->isSubscribing = true; + infos = infos->next; + } } void NSConsumerHandleRecvProviderChanged(NSMessage * msg) @@ -393,6 +409,9 @@ void NSConsumerHandleRecvTopicLL(NSProvider_internal * provider) { NS_VERIFY_NOT_NULL_V(provider); + NSRemoveConnections(provider->connection); + provider->connection = NULL; + NSResult ret = NSProviderCacheUpdate(provider); NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL); diff --git a/service/notification/src/consumer/NSConsumerMemoryCache.c b/service/notification/src/consumer/NSConsumerMemoryCache.c index 8cbb276..7501958 100644 --- a/service/notification/src/consumer/NSConsumerMemoryCache.c +++ b/service/notification/src/consumer/NSConsumerMemoryCache.c @@ -291,20 +291,31 @@ NSResult NSConsumerCacheWriteProvider(NSCacheList * list, NSCacheElement * newOb NSProvider_internal * newProvObj = (NSProvider_internal *) newObj->data; NSCacheElement * it = NSStorageRead(list, newProvObj->providerId); + pthread_mutex_lock(mutex); if (it) { - NSProvider_internal * provObj = (NSProvider_internal *) it->data; + if (newProvObj->connection) + { + NSProvider_internal * provObj = (NSProvider_internal *) it->data; + + NSProviderConnectionInfo * infos = provObj->connection; + NSProviderConnectionInfo * lastConn = infos->next; + while(lastConn) + { + infos = lastConn; + lastConn = lastConn->next; + } + infos->next = NSCopyProviderConnections(newProvObj->connection); + } - NSProviderConnectionInfo * infos = provObj->connection; - NSProviderConnectionInfo * lastConn = infos->next; - while(lastConn) + if (newProvObj->topicLL) { - infos = lastConn; - lastConn = lastConn->next; + NSProvider_internal * provObj = (NSProvider_internal *) it->data; + NSRemoveTopicLL(provObj->topicLL); + provObj->topicLL = NSCopyTopicLL(newProvObj->topicLL); } - infos->next = NSCopyProviderConnections(newProvObj->connection); pthread_mutex_unlock(mutex);