Fix bugs for result of dynamic analizer.
[platform/upstream/iotivity.git] / service / notification / src / consumer / NSConsumerInternalTaskController.c
index 0775637..fafe0c6 100644 (file)
@@ -80,7 +80,7 @@ void NSDestroyInternalCachedList()
 
     NSDestroyMessageStateList();
     pthread_mutex_destroy(*NSGetMessageListMutex());
-    *NSGetMessageListMutex() = NULL;
+    NSOICFree(*NSGetMessageListMutex());
 }
 
 NSProvider_internal * NSProviderCacheFind(const char * providerId)
@@ -149,6 +149,8 @@ NSResult NSProviderCacheUpdate(NSProvider_internal * provider)
     NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(ret == NS_OK ? (void *) 1 : NULL,
             NS_ERROR, NSOICFree(obj));
 
+    NSOICFree(obj);
+
     return NS_OK;
 }
 
@@ -165,18 +167,22 @@ void NSCancelAllSubscription()
         NSSetProviderCacheList(ProviderCache);
     }
 
-    NSCacheElement * obj = NULL;
-    while ((obj = NSPopProviderCacheList(ProviderCache)))
+    NSCacheElement * obj = NSPopProviderCacheList(ProviderCache);
+    while (obj)
     {
         NS_LOG(DEBUG, "build NSTask");
         NSProvider * prov = NSCopyProvider((NSProvider_internal *) obj->data);
         NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(prov,
-                    NSRemoveProvider_internal((NSProvider_internal *) obj->data));
+                    NSRemoveProvider_internal((void *) obj->data));
 
         NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, prov);
         NS_VERIFY_NOT_NULL_V(task);
 
         NSConsumerPushEvent(task);
+        NSRemoveProvider_internal((void *) obj->data);
+        NSOICFree(obj);
+
+        obj = NSPopProviderCacheList(ProviderCache);
     }
 }
 
@@ -239,7 +245,8 @@ void NSConsumerHandleProviderDiscovered(NSProvider_internal * provider)
     }
 
     NSResult ret = NSProviderCacheUpdate(provider);
-    NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
+    NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(ret == NS_OK ? (void *) 1 : NULL,
+            NSRemoveProvider_internal(providerCacheData));
 
     if (isAdded == false)
     {
@@ -254,16 +261,17 @@ void NSConsumerHandleProviderDiscovered(NSProvider_internal * provider)
     if (provider->accessPolicy == NS_SELECTION_CONSUMER && isSubscribing == false)
     {
         NS_LOG(DEBUG, "accepter is NS_ACCEPTER_CONSUMER, Callback to user");
-        NSProvider * providerForCb = NSCopyProvider(provider);
-        NSProviderChanged(providerForCb, NS_DISCOVERED);
-        NSRemoveProvider(providerForCb);
+        NSProvider * prov = NSCopyProvider(provider);
+        NSProviderChanged(prov, NS_DISCOVERED);
+        NSRemoveProvider(prov);
     }
     else
     {
         NS_LOG(DEBUG, "accepter is NS_ACCEPTER_PROVIDER, request subscribe");
-        NSProvider_internal * subProvider = NSCopyProvider_internal(provider);
+        NSProvider * subProvider = NSCopyProvider(provider);
         NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) subProvider);
-        NS_VERIFY_NOT_NULL_V(task);
+        NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(task,
+                NSRemoveProvider_internal(providerCacheData));
 
         NSConsumerPushEvent(task);
     }
@@ -282,8 +290,9 @@ void NSConsumerHandleProviderDeleted(NSProvider_internal * provider)
     NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
 
     NS_LOG_V(DEBUG, "Stopped Provider : %s", provider->providerId);
-    NSProvider * providerForCb = NSCopyProvider(provider);
-    NSProviderChanged(providerForCb, NS_STOPPED);
+    NSProvider * prov = NSCopyProvider(provider);
+    NSProviderChanged(prov, NS_STOPPED);
+    NSRemoveProvider(prov);
 }
 
 void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider)
@@ -341,6 +350,7 @@ void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
 
     pthread_mutex_unlock(mutex);
     NSProviderChanged(prov, (NSProviderState) msg->messageId);
+    NSRemoveProvider(prov);
 }
 
 void NSConsumerHandleRecvMessage(NSMessage * msg)
@@ -376,7 +386,7 @@ void NSConsumerHandleMakeSyncInfo(NSSyncInfo * sync)
     NS_VERIFY_NOT_NULL_V (provider);
 
     NSProviderConnectionInfo * connections = NSCopyProviderConnections(provider->connection);
-    NSRemoveProvider_internal(provider);
+    NSRemoveProvider_internal((void *) provider);
     NS_VERIFY_NOT_NULL_V (connections);
 
     NSSyncInfo_internal * syncInfo = (NSSyncInfo_internal *)OICMalloc(sizeof(NSSyncInfo_internal));
@@ -430,6 +440,7 @@ void NSConsumerHandleRecvTopicLL(NSProvider_internal * provider)
     NS_LOG(DEBUG, "call back to user");
     NSProvider * prov = NSCopyProvider(provider);
     NSProviderChanged((NSProvider *) prov, (NSProviderState) NS_TOPIC);
+    NSRemoveProvider(prov);
 }
 
 void NSConsumerInternalTaskProcessing(NSTask * task)
@@ -443,7 +454,7 @@ void NSConsumerInternalTaskProcessing(NSTask * task)
         {
             NS_LOG(DEBUG, "Receive Subscribe succeed from provider.");
             NSConsumerHandleSubscribeSucceed((NSProvider_internal *)task->taskData);
-            NSRemoveProvider_internal((NSProvider_internal *)task->taskData);
+            NSRemoveProvider_internal((void *)task->taskData);
             break;
         }
         case TASK_CONSUMER_RECV_PROVIDER_CHANGED:
@@ -537,7 +548,7 @@ void NSUnlockMessageListMutex()
     pthread_mutex_unlock(*NSGetMessageListMutex());
 }
 
-NSMessageStateList * NSGetMessageStateList()
+NSMessageStateList ** NSGetMessageStateListAddr()
 {
     static NSMessageStateList * g_messageStateList = NULL;
     if (g_messageStateList == NULL)
@@ -549,7 +560,12 @@ NSMessageStateList * NSGetMessageStateList()
         g_messageStateList->tail = NULL;
     }
 
-    return g_messageStateList;
+    return & g_messageStateList;
+}
+
+NSMessageStateList * NSGetMessageStateList()
+{
+    return * NSGetMessageStateListAddr();
 }
 
 NSMessageStateLL * NSFindMessageState(uint64_t msgId)
@@ -684,4 +700,13 @@ void NSDestroyMessageStateList()
     NSGetMessageStateList()->tail = NULL;
 
     NSUnlockMessageListMutex();
+
+    pthread_mutex_t * mu = *NSGetMessageListMutex();
+    pthread_mutex_destroy(mu);
+    NSOICFree(mu);
+    *NSGetMessageListMutex() = NULL;
+
+    NSMessageStateList * list = NSGetMessageStateList();
+    NSOICFree(list);
+    *NSGetMessageStateListAddr() = NULL;
 }