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