From 94c235dfc02948bd995773197f818d067580f08a Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期三, 05 八月 2020 09:50:03 +0800
Subject: [PATCH] update shmqueue destory
---
src/queue/include/shm_queue.h | 26 ++++++++++++++++++++------
1 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/queue/include/shm_queue.h b/src/queue/include/shm_queue.h
index 512a913..197adc5 100644
--- a/src/queue/include/shm_queue.h
+++ b/src/queue/include/shm_queue.h
@@ -102,25 +102,39 @@
}
template <typename ELEM_T> SHMQueue<ELEM_T>::~SHMQueue() {
+ if(queue == NULL) {
+ // queue宸茬粡閿�姣�
+ return;
+ }
+
SemUtil::dec(queue->mutex);
queue->reference--;
// LoggerFactory::getLogger().debug("SHMQueue destructor reference===%d",
if (queue->reference.load() == 0) {
- delete queue;
- hashtable_t *hashtable = mm_get_hashtable();
- hashtable_remove(hashtable, KEY);
- // printf("SHMQueue destructor delete queue\n");
+ delete queue;
+ queue = NULL;
+ hashtable_t *hashtable = mm_get_hashtable();
+ hashtable_remove(hashtable, KEY);
+ // 姝ゆ椂queue宸茬粡閿�姣侊紝鏃犻渶 SemUtil::inc(queue->mutex)
+ // printf("SHMQueue destructor delete queue\n");
} else {
- SemUtil::inc(queue->mutex);
+ SemUtil::inc(queue->mutex);
}
+
}
template <typename ELEM_T> void SHMQueue<ELEM_T>::force_destroy() {
+ if(queue == NULL) {
+ // queue宸茬粡閿�姣�
+ return;
+ }
+
SemUtil::dec(queue->mutex);
delete queue;
+ queue = NULL;
hashtable_t *hashtable = mm_get_hashtable();
hashtable_remove(hashtable, KEY);
- SemUtil::inc(queue->mutex);
+ // 姝ゆ椂queue宸茬粡閿�姣侊紝鏃犻渶 SemUtil::inc(queue->mutex)
}
template <typename ELEM_T> inline uint32_t SHMQueue<ELEM_T>::size() {
--
Gitblit v1.8.0