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/socket/bus_server_socket.cpp |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)

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