From fcdbbd495c15b0b12e03f50a5c5fa1a6c30a737b Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期三, 24 二月 2021 14:42:55 +0800 Subject: [PATCH] update --- src/logger_factory.cpp | 2 +- test_net_socket/net_mod_socket.sh | 2 +- src/CMakeLists.txt | 2 +- src/socket/shm_socket.cpp | 39 +++++++++++++++++++++++---------------- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c66f660..9026d92 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,7 +32,7 @@ if (BUILD_SHARED_LIBS) add_library(shm_queue SHARED ${_SOURCES_}) else() - add_library(shm_queue SHARED ${_SOURCES_}) + add_library(shm_queue STATIC ${_SOURCES_}) endif() # STATIC SHARED diff --git a/src/logger_factory.cpp b/src/logger_factory.cpp index 2301a27..79383d7 100644 --- a/src/logger_factory.cpp +++ b/src/logger_factory.cpp @@ -18,7 +18,7 @@ config.logFile = logFile; #ifdef BUILD_Debug - config.level = Logger::INFO; + config.level = Logger::DEBUG; config.console = 1; #else config.level = Logger::ERROR; diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp index f5e1388..38bbd8f 100644 --- a/src/socket/shm_socket.cpp +++ b/src/socket/shm_socket.cpp @@ -17,10 +17,10 @@ } static pthread_once_t _once_ = PTHREAD_ONCE_INIT; -static pthread_key_t _perthread_socket_key_; +static pthread_key_t _localthread_socket_key_; -static void _destrory_socket_perthread(void *tmp_socket); -static void _create_socket_key_perthread(void); +static void _destrory_threadlocal_socket_(void *tmp_socket); +static void _create_threadlocal_socket_key_(void); static int shm_recvpakfrom(shm_socket_t *sockt, shm_packet_t *recvpak , const struct timespec *timeout, int flag); @@ -136,6 +136,11 @@ int shm_socket_close(shm_socket_t *sockt) { + + shm_socket_t * threadlocal_socket = (shm_socket_t *)pthread_getspecific(_localthread_socket_key_); + if(threadlocal_socket != NULL) { + _destrory_threadlocal_socket_(threadlocal_socket); + } return _shm_socket_close_(sockt); } @@ -283,15 +288,17 @@ // ================================================================================================= /* Free thread-specific data buffer */ -static void _destrory_socket_perthread(void *tmp_socket) +static void _destrory_threadlocal_socket_(void *tmp_socket) { int rv; + + logger->debug("%d destroy threadlocal socket\n", pthread_self()); + if(tmp_socket == NULL) return; - - logger->debug("%d destroy tmp socket\n", pthread_self()); + _shm_socket_close_((shm_socket_t *)tmp_socket); - rv = pthread_setspecific(_perthread_socket_key_, NULL); + rv = pthread_setspecific(_localthread_socket_key_, NULL); if ( rv != 0) { logger->error(rv, "shm_sendandrecv : pthread_setspecific"); exit(1); @@ -299,14 +306,14 @@ } /* One-time key creation function */ -static void _create_socket_key_perthread(void) +static void _create_threadlocal_socket_key_(void) { int s; /* Allocate a unique thread-specific data key and save the address of the destructor for thread-specific data buffers */ - s = pthread_key_create(&_perthread_socket_key_, _destrory_socket_perthread); - //s = pthread_key_create(&_perthread_socket_key_, NULL); + s = pthread_key_create(&_localthread_socket_key_, _destrory_threadlocal_socket_); + //s = pthread_key_create(&_localthread_socket_key_, NULL); if (s != 0) { logger->error(s, "pthread_key_create"); exit(1); @@ -403,22 +410,22 @@ shm_packet_t recvpak; std::map<int, shm_packet_t>::iterator recvbufIter; // 鐢╰hread local 淇濊瘉姣忎釜绾跨▼鐢ㄤ竴涓嫭鍗犵殑socket鎺ュ彈瀵规柟杩斿洖鐨勪俊鎭� - shm_socket_t *tmp_socket; + shm_socket_t *tmp_socket = NULL; - rv = pthread_once(&_once_, _create_socket_key_perthread); + rv = pthread_once(&_once_, _create_threadlocal_socket_key_); if (rv != 0) { logger->error(rv, "shm_sendandrecv pthread_once"); exit(1); } - tmp_socket = (shm_socket_t *)pthread_getspecific(_perthread_socket_key_); + tmp_socket = (shm_socket_t *)pthread_getspecific(_localthread_socket_key_); if (tmp_socket == NULL) { /* If first call from this thread, allocate buffer for thread, and save its location */ - logger->debug("%ld create tmp socket\n", (long)pthread_self() ); + logger->debug("%lu create threadlocal socket\n", (long)pthread_self() ); tmp_socket = shm_socket_open(SHM_SOCKET_DGRAM); - rv = pthread_setspecific(_perthread_socket_key_, tmp_socket); + rv = pthread_setspecific(_localthread_socket_key_, tmp_socket); if ( rv != 0) { logger->error(rv, "shm_sendandrecv : pthread_setspecific"); exit(1); @@ -502,7 +509,7 @@ tryn++; rv = shm_recvfrom(tmp_socket, recv_buf, recv_size, &recv_key, timeout, flags); if(rv != 0) { - logger->error("_shm_sendandrecv_thread_local : %s\n", bus_strerror(rv)); + logger->error("_shm_sendandrecv_alloc_new : %s\n", bus_strerror(rv)); return rv; } diff --git a/test_net_socket/net_mod_socket.sh b/test_net_socket/net_mod_socket.sh index 8d89f39..7e12074 100755 --- a/test_net_socket/net_mod_socket.sh +++ b/test_net_socket/net_mod_socket.sh @@ -23,7 +23,7 @@ ./test_net_mod_socket --fun="start_net_client" \ - --sendlist="localhost:5000:100" \ + --sendlist=" :5000:100" \ --publist="localhost:5000" -- Gitblit v1.8.0