bug fix about memory leak.
authorjaesick.shin <jaesick.shin@samsung.com>
Fri, 14 Oct 2016 02:52:25 +0000 (11:52 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 14 Oct 2016 04:19:47 +0000 (04:19 +0000)
this patch include,
bug fix for dynamic analyzer.

Change-Id: I4fc7ff7436ac6019abe3aaaf8467392068e0ad7d
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/13255
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
service/notification/src/provider/NSProviderMemoryCache.c
service/notification/src/provider/NSProviderTopic.c

index 2e6034a..bcc0bfb 100644 (file)
@@ -206,6 +206,7 @@ NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj)
             NS_LOG(DEBUG, "already registered for topic name");\r
             OICFree(topicData->topicName);\r
             OICFree(topicData);\r
+            OICFree(newObj);\r
             pthread_mutex_unlock(&NSCacheMutex);\r
             return NS_FAIL;\r
         }\r
@@ -222,6 +223,7 @@ NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj)
             NS_LOG(DEBUG, "already registered for topic name");\r
             OICFree(topicData->topicName);\r
             OICFree(topicData);\r
+            OICFree(newObj);\r
             pthread_mutex_unlock(&NSCacheMutex);\r
             return NS_FAIL;\r
         }\r
@@ -238,6 +240,7 @@ NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj)
             NS_LOG(DEBUG, "already registered for topic name");\r
             OICFree(topicData->topicName);\r
             OICFree(topicData);\r
+            OICFree(newObj);\r
             pthread_mutex_unlock(&NSCacheMutex);\r
             return NS_FAIL;\r
         }\r
@@ -404,12 +407,14 @@ NSResult NSProviderDeleteCacheData(NSCacheType type, void * data)
                 (int)topicData->state);\r
 \r
         OICFree(topicData->topicName);\r
+        OICFree(topicData);\r
     }\r
     else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME ||\r
             type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\r
     {\r
         NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data;\r
         OICFree(topicData->topicName);\r
+        OICFree(topicData);\r
     }\r
 \r
     return NS_OK;\r
index 36abe6d..bd23e91 100644 (file)
@@ -307,12 +307,18 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
                     (int) topics->state);\r
 \r
             NSTopicLL * next = topics->next;\r
+            OICFree(topics->topicName);\r
             OICFree(topics);\r
             topics = next;\r
         }\r
 \r
         OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
                 (const OCRepPayload**) (payloadTopicArray), dimensions);\r
+        for (int i = 0; i < (int) dimensionSize; ++i)\r
+        {\r
+            OCRepPayloadDestroy(payloadTopicArray[i]);\r
+        }\r
+        OICFree(payloadTopicArray);\r
     }\r
     else\r
     {\r
@@ -342,10 +348,11 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
     if (OCDoResponse(&response) != OC_STACK_OK)\r
     {\r
         NS_LOG(ERROR, "Fail to response topic list");\r
+        OCRepPayloadDestroy(payload);\r
         return NS_ERROR;\r
     }\r
-    OCRepPayloadDestroy(payload);\r
 \r
+    OCRepPayloadDestroy(payload);\r
     NS_LOG(DEBUG, "NSSendTopicList - OUT");\r
     return NS_OK;\r
 }\r
@@ -465,14 +472,21 @@ void * NSTopicSchedule(void * ptr)
                         {\r
                             newObj->data = topicSyncResult->topicData;\r
                             newObj->next = NULL;\r
-                            NSProviderStorageWrite(consumerTopicList, newObj);\r
-                            NSSendTopicUpdationToConsumer(subData->id);\r
-                            topicSyncResult->result = NS_OK;\r
+                            if(NSProviderStorageWrite(consumerTopicList, newObj) == NS_OK)\r
+                            {\r
+                                NSSendTopicUpdationToConsumer(subData->id);\r
+                                topicSyncResult->result = NS_OK;\r
+                            }\r
+                        }\r
+                        else\r
+                        {\r
+                            OICFree(subData->topicName);\r
+                            OICFree(subData);\r
+                            OICFree(newObj);\r
                         }\r
                     }\r
                     pthread_cond_signal(topicSyncResult->condition);\r
-                    pthread_mutex_unlock(topicSyncResult->mutex);\r
-
+                    pthread_mutex_unlock(topicSyncResult->mutex);
                 }\r
                     break;\r
                 case TASK_UNSUBSCRIBE_TOPIC:\r