From f2a03c696bcf76bbaba349325abeef7be3979205 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期六, 30 一月 2021 19:05:00 +0800
Subject: [PATCH] update

---
 src/shm/hashtable.cpp |   85 ++++++++++++++++++++++++++++--------------
 1 files changed, 57 insertions(+), 28 deletions(-)

diff --git a/src/shm/hashtable.cpp b/src/shm/hashtable.cpp
index 2248ad9..cd2bd5a 100755
--- a/src/shm/hashtable.cpp
+++ b/src/shm/hashtable.cpp
@@ -152,20 +152,61 @@
 }
 
 void hashtable_put(hashtable_t *hashtable, int key, void *value) {
-
-  int rv;
-  if(( rv = svsem_wait(hashtable->mutex)) != 0) {
-    LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
-  }
-
-  _hashtable_put(hashtable, key, value);
-
-  if(( rv = svsem_post(hashtable->mutex)) != 0) {
-    LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
-  }
+  _hashtable_put(hashtable, key, value); 
 }
 
+// bool hashtable_put(hashtable_t *hashtable, int key, void *value, bool overwrite) {
 
+//   int rv;
+//   if(( rv = svsem_wait(hashtable->mutex)) != 0) {
+//     LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
+//   }
+//   if(overwrite) {
+//     _hashtable_put(hashtable, key, value);
+//     goto suc;
+//   }
+//   void * val = _hashtable_get(hashtable, key);
+//   // val = 1鏄痑llockey鐨勬儏鍐�
+//   if(val != NULL && val != (void *)1) 
+//     goto fail;
+
+//   _hashtable_put(hashtable, key, value);
+
+// suc:
+//   if(( rv = svsem_post(hashtable->mutex)) != 0) {
+//     LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
+//   }
+//   return true;
+
+// fail:
+//   if(( rv = svsem_post(hashtable->mutex)) != 0) {
+//     LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
+//   }
+//   return false;
+// }
+
+
+
+int hashtable_alloc_key(hashtable_t *hashtable) {
+  int rv;
+  int key = START_KEY;
+  rv = svsem_wait(hashtable->mutex);
+  if(rv != 0) {
+    LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n");
+  }
+
+  while(_hashtable_get(hashtable, key) != NULL) {
+    key++;
+  }
+  // 鍗犵敤key
+  _hashtable_put(hashtable, key, (void *)1);
+
+  rv = svsem_post(hashtable->mutex);
+  if(rv != 0) {
+    LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n");
+  }
+  return key;
+}
 
 static inline void _hashtable_foreach(hashtable_t *hashtable, std::function<void(int, void *)>  cb) {
   tailq_entry_t *item;
@@ -207,25 +248,13 @@
 }
 
 
-int hashtable_alloc_key(hashtable_t *hashtable) {
-  int rv;
-  int key = START_KEY;
-  rv = svsem_wait(hashtable->mutex);
-  if(rv != 0) {
-    LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n");
-  }
 
-  while(_hashtable_get(hashtable, key) != NULL) {
-    key++;
-  }
-  // 鍗犵敤key
-  _hashtable_put(hashtable, key, (void *)1);
+int hashtable_lock(hashtable_t *hashtable) {
+  return svsem_wait(hashtable->mutex);
+}
 
-  rv = svsem_post(hashtable->mutex);
-  if(rv != 0) {
-    LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n");
-  }
-  return key;
+int hashtable_unlock(hashtable_t *hashtable) {
+  return svsem_post(hashtable->mutex);
 }
 
 

--
Gitblit v1.8.0