bugfixed: common_blocked_queue_[alloc|free]_node must use lock

remotes/origin/fstore_storage_engine
YuQing 2022-11-10 08:47:07 +08:00
parent 22c7e31752
commit 1eb603cfd1
2 changed files with 11 additions and 3 deletions

View File

@ -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 * 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 Version 1.63 2022-10-16
* sockopt.[hc]: getIpAndPort support ipv6 * sockopt.[hc]: getIpAndPort support ipv6

View File

@ -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( static inline struct common_blocked_node *common_blocked_queue_alloc_node(
struct common_blocked_queue *queue) 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( static inline void common_blocked_queue_free_node(
struct common_blocked_queue *queue, struct common_blocked_queue *queue,
struct common_blocked_node *node) struct common_blocked_node *node)
{ {
pthread_mutex_lock(&(queue->lc_pair.lock));
fast_mblock_free_object(&queue->mblock, node); 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, 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) common_blocked_queue_pop_all_nodes_ex(queue, false)
#define common_blocked_queue_free_one_node(queue, node) \ #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, void common_blocked_queue_free_all_nodes(struct common_blocked_queue *queue,
struct common_blocked_node *node); struct common_blocked_node *node);