Update parts of getting the latest in mDfsAsyncQueue
authorTae-Young Chung <ty83.chung@samsung.com>
Mon, 28 Nov 2022 07:06:18 +0000 (16:06 +0900)
committerKwanghoon Son <k.son@samsung.com>
Wed, 14 Dec 2022 06:33:18 +0000 (15:33 +0900)
Change-Id: Ica5b2236ca869f9a415143f1737fbced9321157e
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
mv_3d/3d/src/Mv3d.cpp

index dd5cafc..288103c 100644 (file)
@@ -28,7 +28,7 @@ using namespace open3d;
 #endif
 
 #include "Mv3d.h"
-
+#define MV_3D_TIMEOUT_SEC 3
 namespace mediavision
 {
 namespace mv3d
@@ -381,21 +381,24 @@ gpointer Mv3d::DfsThreadLoop(gpointer data)
 {
        Mv3d *handle = static_cast<Mv3d *>(data);
        while (handle->mDfsIsLive) {
-               auto queueLength = static_cast<int>(g_async_queue_length(handle->mDfsAsyncQueue));
-               if (queueLength < 0)
-                       continue;
+               auto base = g_async_queue_timeout_pop(handle->mDfsAsyncQueue, MV_3D_TIMEOUT_SEC * G_TIME_SPAN_SECOND);
+               if (!base) {
+                       LOGW("Timeout! no more items. Exit thread");
+                       break;
+               }
 
-               for (int itemIndex = 0; itemIndex < queueLength; itemIndex++) {
-                       gpointer base = g_async_queue_try_pop(handle->mDfsAsyncQueue);
+               auto queueRemaining = static_cast<int>(g_async_queue_length(handle->mDfsAsyncQueue));
+               LOGI("%d remaining", queueRemaining);
+
+               while (queueRemaining > 0) {
                        auto pItem = static_cast<std::shared_ptr<DfsInputData> *>(base);
                        auto item = std::move(*pItem);
                        delete pItem;
                        item.reset();
-               }
 
-               gpointer base = g_async_queue_try_pop(handle->mDfsAsyncQueue);
-               if (!base) {
-                       continue;
+                       gpointer base = g_async_queue_pop(handle->mDfsAsyncQueue);
+                       queueRemaining--;
+                       LOGI("%d remaining", queueRemaining);
                }
 
                auto pInput = static_cast<std::shared_ptr<DfsInputData> *>(base);