From de99649a963d5ae65e562d5846b5e5554b26ba79 Mon Sep 17 00:00:00 2001 From: Jaeyun Jung Date: Mon, 21 Aug 2023 17:54:37 +0900 Subject: [PATCH] [Util] macro to wait condition Update macro to wait timed-out condition. Signed-off-by: Jaeyun Jung --- src/libnnstreamer-edge/nnstreamer-edge-queue.c | 17 ++--------------- src/libnnstreamer-edge/nnstreamer-edge-queue.h | 1 - src/libnnstreamer-edge/nnstreamer-edge-util.h | 14 +++++++++++++- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-queue.c b/src/libnnstreamer-edge/nnstreamer-edge-queue.c index 2d1bc50..640c8bc 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-queue.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-queue.c @@ -298,21 +298,8 @@ nns_edge_queue_wait_pop (nns_edge_queue_h handle, unsigned int timeout, *size = 0U; nns_edge_lock (q); - if (q->length == 0U) { - if (timeout > 0) { - struct timespec ts; - struct timeval now; - - gettimeofday (&now, NULL); - - ts.tv_sec = now.tv_sec + timeout / 1000; - ts.tv_nsec = now.tv_usec * 1000 + (timeout % 1000) * 1000000; - - nns_edge_cond_timedwait (q, &ts); - } else { - nns_edge_cond_wait (q); - } - } + if (q->length == 0U) + nns_edge_cond_wait_until (q, timeout); popped = _pop_data (q, false, data, size); nns_edge_unlock (q); diff --git a/src/libnnstreamer-edge/nnstreamer-edge-queue.h b/src/libnnstreamer-edge/nnstreamer-edge-queue.h index ff43b2d..c548483 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-queue.h +++ b/src/libnnstreamer-edge/nnstreamer-edge-queue.h @@ -15,7 +15,6 @@ #define __NNSTREAMER_EDGE_QUEUE_H__ #include -#include #include "nnstreamer-edge.h" #ifdef __cplusplus diff --git a/src/libnnstreamer-edge/nnstreamer-edge-util.h b/src/libnnstreamer-edge/nnstreamer-edge-util.h index 45e499f..30a6f68 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-util.h +++ b/src/libnnstreamer-edge/nnstreamer-edge-util.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include "nnstreamer-edge.h" @@ -67,7 +68,18 @@ extern "C" { #define nns_edge_cond_init(h) do { pthread_cond_init (&(h)->cond, NULL); } while (0) #define nns_edge_cond_destroy(h) do { pthread_cond_destroy (&(h)->cond); } while (0) #define nns_edge_cond_wait(h) do { pthread_cond_wait (&(h)->cond, &(h)->lock); } while (0) -#define nns_edge_cond_timedwait(h,t) do { pthread_cond_timedwait (&(h)->cond, &(h)->lock, (t)); } while (0) +#define nns_edge_cond_wait_until(h,ms) do { \ + if ((ms) > 0) { \ + struct timespec ts; \ + struct timeval now; \ + gettimeofday (&now, NULL); \ + ts.tv_sec = now.tv_sec + (ms) / 1000; \ + ts.tv_nsec = now.tv_usec * 1000 + ((ms) % 1000) * 1000000; \ + pthread_cond_timedwait (&(h)->cond, &(h)->lock, &ts); \ + } else { \ + pthread_cond_wait (&(h)->cond, &(h)->lock); \ + } \ + } while (0) #define nns_edge_cond_signal(h) do { pthread_cond_signal (&(h)->cond); } while (0) /** -- 2.34.1