From d79bbeef21dcccf862210639006d34393086e83c Mon Sep 17 00:00:00 2001 From: KIM JungYong Date: Fri, 23 Sep 2016 15:56:56 +0900 Subject: [PATCH] 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 --- service/notification/src/consumer/NSConsumerCommunication.c | 2 -- .../src/consumer/NSConsumerInternalTaskController.c | 11 +++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) 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); -- 2.7.4