Modify(Fix) Logic bugs in Notification consumer
authorYounghyunJoo <yh_.joo@samsung.com>
Thu, 18 Aug 2016 11:38:32 +0000 (20:38 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 19 Aug 2016 06:59:58 +0000 (06:59 +0000)
Change-Id: Ia39dd3519f8ed0febe12b7655aaa9eb3478d33da
Signed-off-by: YounghyunJoo <yh_.joo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10615
Reviewed-by: Chihyun Cho <ch79.cho@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/consumer/NSConsumerCommon.c
service/notification/src/consumer/NSConsumerCommunication.c
service/notification/src/consumer/NSConsumerDiscovery.c

index 22bd30e..7f36b32 100644 (file)
@@ -367,13 +367,15 @@ NSResult NSInsertTopicNode(NSTopicLL * topicHead, NSTopicLL * topicNode)
     NS_VERIFY_NOT_NULL(topicNode, NS_ERROR);
 
     NSTopicLL * iter = topicHead;
+    NSTopicLL * prev = NULL;
 
     while (iter)
     {
+        prev = iter;
         iter = (NSTopicLL *) iter->next;
     }
 
-    iter->next = topicNode;
+    prev->next = topicNode;
     topicNode->next = NULL;
 
     return NS_OK;
@@ -384,15 +386,16 @@ void NSRemoveTopicLL(NSTopicLL * topicHead)
     NS_VERIFY_NOT_NULL_V(topicHead);
 
     NSTopicLL * iter = topicHead;
+    NSTopicLL * following = NULL;
 
     while (iter)
     {
+        following = (NSTopicLL *) iter->next;
+
         NSRemoveTopicNode(iter);
 
-        iter = (NSTopicLL *) iter->next;
+        iter = following;
     }
-
-    NSOICFree(topicHead);
 }
 
 NSTopicLL * NSCopyTopicLL(NSTopicLL * topicHead)
@@ -412,8 +415,7 @@ NSTopicLL * NSCopyTopicLL(NSTopicLL * topicHead)
         NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newTopicNode, NULL, NSRemoveTopicLL(newTopicHead));
 
         NSResult ret = NSInsertTopicNode(newTopicHead, newTopicNode);
-        NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(NSOCResultToSuccess(ret),
-                    NULL, NSRemoveTopicLL(newTopicHead));
+        NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(ret, NULL, NSRemoveTopicLL(newTopicHead));
 
         iter = (NSTopicLL *) iter->next;
     }
index 75bc415..a21741b 100644 (file)
@@ -285,6 +285,7 @@ NSMessage * NSCreateMessage_internal(uint64_t id, const char * providerId)
     retMsg->title = NULL;
     retMsg->contentText = NULL;
     retMsg->sourceName = NULL;
+    retMsg->topic = NULL;
     retMsg->type = NS_MESSAGE_INFO;
     retMsg->dateTime = NULL;
     retMsg->ttl = 0;
@@ -556,6 +557,7 @@ NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse)
     NS_VERIFY_NOT_NULL(payloadValue, NULL);
 
     size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions);
+    NS_LOG_V(DEBUG, "DimensionSize: %d", dimensionSize);
 
     if (dimensionSize == 0 || payloadValue->type == OCREP_PROP_NULL ||
             payloadValue->arr.objArray == NULL)
@@ -586,6 +588,8 @@ NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse)
                 NS_ATTRIBUTE_TOPIC_NAME, & topicName);
         NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(getResult == true ? (void *) 1 : NULL,
                 NULL, NSRemoveTopicLL(topicLL));
+        NS_LOG_V(DEBUG, "topic name: %s", topicName);
+        NS_LOG_V(DEBUG, "topic selection: %d", state);
 
         topicNode->topicName = topicName;
         topicNode->state = state;
@@ -593,12 +597,12 @@ NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse)
         if (i == 0)
         {
             topicLL = topicNode;
+            topicNode->next = NULL;
             continue;
         }
 
         NSResult ret = NSInsertTopicNode(topicLL, topicNode);
-        NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(NSOCResultToSuccess(ret),
-                    NULL, NSRemoveTopicLL(topicLL));
+        NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(ret, NULL, NSRemoveTopicLL(topicLL));
     }
 
     return topicLL;
index b2f110f..48a7041 100644 (file)
@@ -236,6 +236,7 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     newProvider->topicUri = topicUri;
     newProvider->accessPolicy = (NSSelector)accepter;
     newProvider->connection = connection;
+    newProvider->topicLL = NULL;
 
     return newProvider;
 }