From e4ce347428a0d459c7561f7bb3e180f351c11a4f Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期二, 14 七月 2020 10:38:18 +0800
Subject: [PATCH] update

---
 queue/include/shm_queue.h |   22 +++++-----------------
 1 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/queue/include/shm_queue.h b/queue/include/shm_queue.h
index 1ccd873..93bd7dc 100644
--- a/queue/include/shm_queue.h
+++ b/queue/include/shm_queue.h
@@ -15,19 +15,6 @@
 {
 
 private:
-    static hashtable_t * getHashTable() {
-        static hashtable_t *hashtable = NULL;
-          
-        if(hashtable == NULL) {
-            int first = mm_init(sizeof(hashtable_t), (void **)&hashtable);
-            if (first)
-               hashtable_init(hashtable);
-        }
-        return hashtable;
-        
-    }
-
-private:
     const int KEY;
  
 public:
@@ -67,9 +54,10 @@
 SHMQueue<ELEM_T>::SHMQueue(int key, size_t qsize): KEY(key)
 {
 
-    hashtable_t *hashtable = getHashTable();
+    hashtable_t *hashtable = mm_get_hashtable();
+    queue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, key);
     //LockFreeQueue<int, 10000> q;
-    if ((queue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, key)) == NULL ) {
+    if (queue == NULL || (void *)queue == (void *)1) {
         queue = new LockFreeQueue<ELEM_T>(qsize);
         hashtable_put(hashtable,  key, (void *)queue);
     }
@@ -82,9 +70,9 @@
 {
     queue->reference--;
     LoggerFactory::getLogger().debug("SHMQueue destructor  reference===%d", queue->reference.load());
-    if(queue->reference == 0) {
+    if(queue->reference.load() == 0) {
         delete queue;
-        hashtable_t *hashtable = getHashTable();
+        hashtable_t *hashtable = mm_get_hashtable();
         hashtable_remove(hashtable, KEY);
         LoggerFactory::getLogger().debug("SHMQueue destructor delete queue");
     }

--
Gitblit v1.8.0