From bc2afe32e8db4318f2a2adea49d85b10d0d4cc97 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期一, 08 二月 2021 16:51:24 +0800
Subject: [PATCH] update

---
 src/shm/shm_mm_wrapper.cpp |   61 ++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 1 deletions(-)

diff --git a/src/shm/shm_mm_wrapper.cpp b/src/shm/shm_mm_wrapper.cpp
index 6175923..59487c6 100644
--- a/src/shm/shm_mm_wrapper.cpp
+++ b/src/shm/shm_mm_wrapper.cpp
@@ -1,7 +1,10 @@
-#include "shm_mm_wraper.h"
+#include "shm_mm_wrapper.h"
 #include "mem_pool.h"
 #include "hashtable.h"
+#include "lock_free_queue.h"
+#include "shm_socket.h"
 
+#define BUFFER_TIME 10
 void shm_mm_wrapper_init(int size) {
 	mem_pool_init(size);
 }
@@ -13,3 +16,59 @@
 int shm_mm_wrapper_alloc_key() {
 	return mm_alloc_key();
 }
+
+//鍒犻櫎鍖呭惈鍦╧eys鍐呯殑queue
+int shm_mm_wrapper_remove_keys(int keys[], int length) {
+  hashtable_t *hashtable = mm_get_hashtable();
+  LockFreeQueue<shm_packet_t> *mqueue;
+  int count = 0;
+  for(int i = 0; i< length; i++) {
+    // 閿�姣佸叡浜唴瀛樼殑queue
+    mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]);
+    if(mqueue == NULL) {
+    	continue;
+    }
+    if(difftime(time(NULL), mqueue->getCreateTime()) > BUFFER_TIME ) {
+      delete mqueue;
+      hashtable_remove(hashtable, keys[i]);
+      LoggerFactory::getLogger()->debug("remove queue %d",  keys[i]);
+      count++;
+    }
+    
+  }
+  return count;
+}
+
+ 
+// 鍒犻櫎涓嶅湪keys鍐呯殑queue 
+int shm_mm_wrapper_remove_keys_exclude(int keys[], int length) {
+  hashtable_t *hashtable = mm_get_hashtable();
+  std::set<int> *keyset = hashtable_keyset(hashtable);
+  std::set<int>::iterator keyItr;
+  LockFreeQueue<shm_packet_t> *mqueue;
+  bool found;
+  int count = 0;
+  for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) {
+    found = false;
+    for (size_t i = 0; i < length; i++) {
+      if (*keyItr == keys[i]) {
+        found = true;
+        break;
+      }
+    }
+    // 100鍐呯殑鏄痓us鍐呴儴鑷繁鐢ㄧ殑
+    if (!found && *keyItr > 100) {
+      // 閿�姣佸叡浜唴瀛樼殑queue
+      mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, *keyItr);
+      if(difftime(time(NULL), mqueue->getCreateTime()) > BUFFER_TIME ) {
+        delete mqueue;
+        hashtable_remove(hashtable, *keyItr);
+        LoggerFactory::getLogger()->debug("remove queue %d",  *keyItr);
+        count++;
+      }
+     
+    }
+  }
+  delete keyset;
+  return count;
+}

--
Gitblit v1.8.0