From 2df796589c2824eaf554b9509df107485e63ef91 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Thu, 26 Mar 2020 19:04:41 +0800 Subject: [PATCH] add function common_blocked_queue_push_ex --- src/common_blocked_queue.c | 14 ++++---------- src/common_blocked_queue.h | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/common_blocked_queue.c b/src/common_blocked_queue.c index 6b354ce..ab9a641 100644 --- a/src/common_blocked_queue.c +++ b/src/common_blocked_queue.c @@ -50,11 +50,11 @@ void common_blocked_queue_destroy(struct common_blocked_queue *queue) pthread_mutex_destroy(&(queue->lock)); } -int common_blocked_queue_push(struct common_blocked_queue *queue, void *data) +int common_blocked_queue_push_ex(struct common_blocked_queue *queue, + void *data, bool *notify) { int result; struct common_blocked_node *node; - bool notify; if ((result=pthread_mutex_lock(&(queue->lock))) != 0) { @@ -75,16 +75,15 @@ int common_blocked_queue_push(struct common_blocked_queue *queue, void *data) node->data = data; node->next = NULL; - if (queue->tail == NULL) { queue->head = node; - notify = true; + *notify = true; } else { queue->tail->next = node; - notify = false; + *notify = false; } queue->tail = node; @@ -96,11 +95,6 @@ int common_blocked_queue_push(struct common_blocked_queue *queue, void *data) __LINE__, result, STRERROR(result)); } - if (notify) - { - pthread_cond_signal(&(queue->cond)); - } - return 0; } diff --git a/src/common_blocked_queue.h b/src/common_blocked_queue.h index 3dd7fec..bb8bb43 100644 --- a/src/common_blocked_queue.h +++ b/src/common_blocked_queue.h @@ -61,7 +61,27 @@ static inline void common_blocked_queue_terminate_all( } } -int common_blocked_queue_push(struct common_blocked_queue *queue, void *data); +//notify by the caller +int common_blocked_queue_push_ex(struct common_blocked_queue *queue, + void *data, bool *notify); + +static inline int common_blocked_queue_push(struct common_blocked_queue + *queue, void *data) +{ + bool notify; + int result; + + if ((result=common_blocked_queue_push_ex(queue, data, ¬ify)) == 0) + { + if (notify) + { + pthread_cond_signal(&(queue->cond)); + } + } + + return result; +} + void common_blocked_queue_return_nodes(struct common_blocked_queue *queue, struct common_blocked_node *node);