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 <jyong2.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/12167
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Chihyun Cho <ch79.cho@samsung.com>
Reviewed-by: Hun-je Yeon <hunje.yeon@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
(cherry picked from commit
d79bbeef21dcccf862210639006d34393086e83c)
Reviewed-on: https://gerrit.iotivity.org/gerrit/12457
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);
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);