From 1eb603cfd18613439ed9c6b9d1ff932a5789e025 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Thu, 10 Nov 2022 08:47:07 +0800 Subject: [PATCH] bugfixed: common_blocked_queue_[alloc|free]_node must use lock --- HISTORY | 3 ++- src/common_blocked_queue.h | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/HISTORY b/HISTORY index 5d1311d..ad9dc94 100644 --- a/HISTORY +++ b/HISTORY @@ -1,6 +1,7 @@ -Version 1.64 2022-11-07 +Version 1.64 2022-11-10 * shared_func.[hc]: normalize_path use type string_t for general purpose + * bugfixed: common_blocked_queue_[alloc|free]_node must use lock Version 1.63 2022-10-16 * sockopt.[hc]: getIpAndPort support ipv6 diff --git a/src/common_blocked_queue.h b/src/common_blocked_queue.h index 57fa630..83ff10f 100644 --- a/src/common_blocked_queue.h +++ b/src/common_blocked_queue.h @@ -97,14 +97,21 @@ static inline int common_blocked_queue_push(struct common_blocked_queue static inline struct common_blocked_node *common_blocked_queue_alloc_node( struct common_blocked_queue *queue) { - return fast_mblock_alloc_object(&queue->mblock); + struct common_blocked_node *node; + + pthread_mutex_lock(&(queue->lc_pair.lock)); + node = fast_mblock_alloc_object(&queue->mblock); + pthread_mutex_unlock(&(queue->lc_pair.lock)); + return node; } static inline void common_blocked_queue_free_node( struct common_blocked_queue *queue, struct common_blocked_node *node) { + pthread_mutex_lock(&(queue->lc_pair.lock)); fast_mblock_free_object(&queue->mblock, node); + pthread_mutex_unlock(&(queue->lc_pair.lock)); } void common_blocked_queue_push_chain_ex(struct common_blocked_queue *queue, @@ -175,7 +182,7 @@ struct common_blocked_node *common_blocked_queue_pop_all_nodes_ex( common_blocked_queue_pop_all_nodes_ex(queue, false) #define common_blocked_queue_free_one_node(queue, node) \ - fast_mblock_free_object(&queue->mblock, node) + common_blocked_queue_free_node(&queue->mblock, node) void common_blocked_queue_free_all_nodes(struct common_blocked_queue *queue, struct common_blocked_node *node);