From 37a7bd95042c19d7334b099d50ac6dc8e07e4b4e Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期二, 07 七月 2020 16:40:51 +0800
Subject: [PATCH] update

---
 squeue/include/queue_factory.h |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/squeue/include/queue_factory.h b/squeue/include/queue_factory.h
index 23446b0..ca88de6 100644
--- a/squeue/include/queue_factory.h
+++ b/squeue/include/queue_factory.h
@@ -21,11 +21,9 @@
 		
 	}
 
-	 
 
 	template <typename T> static
-	LockFreeQueue<T>* createArrayLockFreeQueue(int key, size_t size=16) {
-		 
+	LockFreeQueue<T>* _createQueue(int key, size_t size = 16) {
 		LockFreeQueue<T> *queue;
 		hashtable_t *hashtable = getHashTable();
 		//LockFreeQueue<int, 10000> q;
@@ -34,14 +32,18 @@
 			hashtable_put(hashtable,  key, (void *)queue);
 		}
 
+		std::cout << "createQueue reference===" << queue->reference << std::endl;
 		return queue;
 	}
 
+	 
 public:
 
 	template <typename T> static
 	LockFreeQueue<T>* createQueue(int key, size_t size = 16) {
-		return QueueFactory::createArrayLockFreeQueue<T>(key, size);
+		LockFreeQueue<T> *queue = _createQueue<T>(key, size);
+		queue->reference++; 
+		return queue;
 	}
 
 	/**
@@ -49,10 +51,18 @@
 	*/
 	template <typename T> static
 	void dropQueue(int key) {
-		LockFreeQueue<T> *queue = QueueFactory::createQueue<T> (key);
-		delete queue;
-		hashtable_t *hashtable = getHashTable();
-		hashtable_remove(hashtable, key);
+		LockFreeQueue<T> *queue = _createQueue<T> (key);
+		if(queue == NULL)
+			return;
+
+		queue->reference--;
+std::cout << "dropQueue reference===" << queue->reference << std::endl;
+		if(queue->reference == 0) {
+			delete queue;
+			hashtable_t *hashtable = getHashTable();
+			hashtable_remove(hashtable, key);
+		}
+		
 	}
 
 };

--
Gitblit v1.8.0