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