changed queue destroy logic to delete the remained data in CA
authorhyuna0213.jo <hyuna0213.jo@samsung.com>
Tue, 26 Apr 2016 05:28:23 +0000 (14:28 +0900)
committerJon A. Cruz <jon@joncruz.org>
Wed, 27 Apr 2016 07:05:05 +0000 (07:05 +0000)
In case of the receive queue in camessagehandler, we don't start
the queue thread because RI supports single thread. accordingly
we have to delete the remained data in CAQueueingThreadDestroy().

Change-Id: I18667b97d97ac83dabcb0affb13b4a593fc15a9f
Signed-off-by: hyuna0213.jo <hyuna0213.jo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/7921
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jon A. Cruz <jon@joncruz.org>
resource/csdk/connectivity/src/caqueueingthread.c

index 754b1c2..9a6c56a 100644 (file)
@@ -92,28 +92,6 @@ static void CAQueueingThreadBaseRoutine(void *threadValue)
         OICFree(message);
     }
 
-    // remove all remained list data.
-    while (u_queue_get_size(thread->dataQueue) > 0)
-    {
-        // get data
-        u_queue_message_t *message = u_queue_get_element(thread->dataQueue);
-
-        // free
-        if(NULL != message)
-        {
-            if (NULL != thread->destroy)
-            {
-                thread->destroy(message->msg, message->size);
-            }
-            else
-            {
-                OICFree(message->msg);
-            }
-
-            OICFree(message);
-        }
-    }
-
     ca_mutex_lock(thread->threadMutex);
     ca_cond_signal(thread->threadCond);
     ca_mutex_unlock(thread->threadMutex);
@@ -261,6 +239,29 @@ CAResult_t CAQueueingThreadDestroy(CAQueueingThread_t *thread)
     ca_mutex_free(thread->threadMutex);
     thread->threadMutex = NULL;
     ca_cond_free(thread->threadCond);
+
+    // remove all remained list data.
+    while (u_queue_get_size(thread->dataQueue) > 0)
+    {
+        // get data
+        u_queue_message_t *message = u_queue_get_element(thread->dataQueue);
+
+        // free
+        if(NULL != message)
+        {
+            if (NULL != thread->destroy)
+            {
+                thread->destroy(message->msg, message->size);
+            }
+            else
+            {
+                OICFree(message->msg);
+            }
+
+            OICFree(message);
+        }
+    }
+
     u_queue_delete(thread->dataQueue);
 
     return CA_STATUS_OK;