From: KIM JungYong Date: Fri, 23 Sep 2016 06:56:56 +0000 (+0900) Subject: Fix bug for topic is changed to empty. X-Git-Tag: 1.3.0~1057^2~57 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d79bbeef21dcccf862210639006d34393086e83c;p=platform%2Fupstream%2Fiotivity.git Fix bug for topic is changed to empty. When the provider delete topic, consumer never callback changed when topic is empty. In this patch, consumer will callback changed topic to upper layer when topic is empty from not empty. Change-Id: I41d0ad42f19298ce2773ab4c17d37cd7c1aa6b5e Signed-off-by: KIM JungYong Reviewed-on: https://gerrit.iotivity.org/gerrit/12167 Tested-by: jenkins-iotivity Reviewed-by: Chihyun Cho Reviewed-by: Hun-je Yeon Reviewed-by: Uze Choi --- diff --git a/service/notification/src/consumer/NSConsumerCommunication.c b/service/notification/src/consumer/NSConsumerCommunication.c index 7f9af56..35b7173 100644 --- a/service/notification/src/consumer/NSConsumerCommunication.c +++ b/service/notification/src/consumer/NSConsumerCommunication.c @@ -824,8 +824,6 @@ OCStackApplicationResult NSIntrospectTopic( clientResponse->devAddr.adapter); NSTopicLL * newTopicLL = NSGetTopicLL(clientResponse); - NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newTopicLL, OC_STACK_KEEP_TRANSACTION, - NSRemoveProvider_internal((NSProvider_internal *) ctx)); NSProvider_internal * provider = (NSProvider_internal *) ctx; provider->topicLL = NSCopyTopicLL(newTopicLL); diff --git a/service/notification/src/consumer/NSConsumerInternalTaskController.c b/service/notification/src/consumer/NSConsumerInternalTaskController.c index 1bb3afb..b069742 100644 --- a/service/notification/src/consumer/NSConsumerInternalTaskController.c +++ b/service/notification/src/consumer/NSConsumerInternalTaskController.c @@ -413,6 +413,17 @@ void NSConsumerHandleRecvTopicLL(NSProvider_internal * provider) NSRemoveConnections(provider->connection); provider->connection = NULL; + NSProvider_internal * cachedProvider = NSProviderCacheFind(provider->providerId); + NS_VERIFY_NOT_NULL_V(cachedProvider); + + if (!cachedProvider->topicLL && !provider->topicLL) + { + NS_LOG(DEBUG, "topic is null and previous status is same."); + NSRemoveProvider_internal(cachedProvider); + return; + } + NSRemoveProvider_internal(cachedProvider); + NSResult ret = NSProviderCacheUpdate(provider); NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);