From 4f8e1e58427147b7a9a784639e2170d34c5d3221 Mon Sep 17 00:00:00 2001
From: fujuntang <fujuntang@smartai.com>
Date: 星期五, 19 十一月 2021 16:09:35 +0800
Subject: [PATCH] Optimize the logic to avoid the possible issue.

---
 src/net/net_mod_server_socket_wrapper.cpp |    2 ++
 src/socket/bus_server_socket.cpp          |   18 ++++++++++++++----
 src/shm/hashtable.h                       |    2 +-
 src/shm/hashtable.cpp                     |    9 ++++++++-
 4 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/src/net/net_mod_server_socket_wrapper.cpp b/src/net/net_mod_server_socket_wrapper.cpp
index 13b7f37..e1ad04d 100644
--- a/src/net/net_mod_server_socket_wrapper.cpp
+++ b/src/net/net_mod_server_socket_wrapper.cpp
@@ -2,11 +2,13 @@
 #include "net_mod_server_socket_wrapper.h"
 
 void *net_mod_server_socket_open(int port) {
+	printf("====net_mod_server_socket_open\n");
 	NetModServerSocket *sockt = new NetModServerSocket(port);
 	return (void *)sockt;
 }
 
 void net_mod_server_socket_close(void *_sockt) {
+	printf("====net_mod_server_socket_close\n");
 	NetModServerSocket *sockt = (NetModServerSocket *)_sockt;
 	delete sockt;
 
diff --git a/src/shm/hashtable.cpp b/src/shm/hashtable.cpp
index 2cc9e38..7162118 100755
--- a/src/shm/hashtable.cpp
+++ b/src/shm/hashtable.cpp
@@ -316,8 +316,15 @@
 
 static size_t hashcode(int key)
 {
+  int val;
 
-  return key % MAPSIZE;
+  if (key < MAPSIZE) {
+    val = key;
+  } else {
+    val = key % MAPSIZE + START_KEY;
+  }
+
+  return val;
 }
 
 /**
diff --git a/src/shm/hashtable.h b/src/shm/hashtable.h
index a4d99e8..55e0356 100755
--- a/src/shm/hashtable.h
+++ b/src/shm/hashtable.h
@@ -6,7 +6,7 @@
 #include <set>
 
 #define START_KEY 1000
-#define MAPSIZE 81920
+#define MAPSIZE 4096
 
 // 鍒涘缓Queue鏁伴噺鐨勪笂闄�
 #define QUEUE_COUNT_LIMIT 300
diff --git a/src/socket/bus_server_socket.cpp b/src/socket/bus_server_socket.cpp
index 5243bf2..ef1321e 100644
--- a/src/socket/bus_server_socket.cpp
+++ b/src/socket/bus_server_socket.cpp
@@ -6,6 +6,7 @@
 #include "bus_error.h"
 
 static Logger *logger = LoggerFactory::getLogger();
+static pthread_mutex_t gMutex;
 
 list gLinkedList;
 void BusServerSocket::foreach_subscripters(std::function<void(SHMKeySet *, int)>  cb) {
@@ -84,11 +85,13 @@
 int  BusServerSocket::start(){
   int rv;
 
-	topic_sub_map =	shm_mm_attach<SHMTopicSubMap>(SHM_BUS_MAP_KEY);
- 
-	rv = _run_proxy_();
+  topic_sub_map =	shm_mm_attach<SHMTopicSubMap>(SHM_BUS_MAP_KEY);
 
-	return rv;
+  pthread_mutex_init(&gMutex, NULL);
+
+  rv = _run_proxy_();
+
+  return rv;
 }
 
 
@@ -516,9 +519,11 @@
     ProcDataZone *procQuePart = shm_mm_attach<ProcDataZone>(SHM_QUEUE_ST_SET);
     ProcPartZone *procPart = shm_mm_attach<ProcPartZone>(SHM_BUS_PROC_PART_MAP_KEY);
     if (flag == PROC_REG) {
+      pthread_mutex_lock(&gMutex);
       if ((proc_iter = proc->find(key)) == proc->end()) {
         proc->insert({key, Data_stru});
       }
+      pthread_mutex_unlock(&gMutex);
 
       if ((proc_part_iter = procPart->find(key)) == procPart->end()) {
         procPart->insert({key, Data_stru.proc_id});
@@ -537,6 +542,7 @@
         SvrSub_ele->erase(key);
       }
 
+      pthread_mutex_lock(&gMutex);
       if ((proc_iter = proc->find(key)) != proc->end()) {
 
         data1 = atoi((proc_iter->second).int_info);
@@ -549,6 +555,7 @@
         proc->erase(key);
 
       }
+      pthread_mutex_unlock(&gMutex);
 
       if ((proc_part_iter = procPart->find(key)) != procPart->end()) {
 
@@ -876,9 +883,12 @@
   ProcZone::iterator proc_iter;
   ProcZone *proc = shm_mm_attach<ProcZone>(SHM_BUS_PROC_MAP_KEY);
 
+  pthread_mutex_lock(&gMutex);
   if ((proc_iter = proc->find(val)) != proc->end()) {
+    pthread_mutex_unlock(&gMutex);
     return true;
   }
+  pthread_mutex_unlock(&gMutex);
   
   return false;
   

--
Gitblit v1.8.0