From 4c5f465bf37e7c21d3434594414ab58c2eb99e98 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期一, 01 二月 2021 15:17:25 +0800 Subject: [PATCH] update --- src/socket/shm_socket.cpp | 44 ++++++++++++++++++++++++++------------------ 1 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp index 5df83a3..6781380 100644 --- a/src/socket/shm_socket.cpp +++ b/src/socket/shm_socket.cpp @@ -18,7 +18,6 @@ -static int _shm_close_dgram_socket(shm_socket_t *socket); static void _destrory_socket_perthread(void *tmp_socket); @@ -41,11 +40,16 @@ LockFreeQueue<shm_msg_t> *queue; hashtable_lock(hashtable); void *tmp_ptr = hashtable_get(hashtable, key); - if (tmp_ptr == NULL || tmp_ptr == (void *)1 || force ) { + + + if (tmp_ptr == NULL || tmp_ptr == (void *)1 ) { queue = new LockFreeQueue<shm_msg_t>(16); hashtable_put(hashtable, key, (void *)queue); hashtable_unlock(hashtable); return queue; + } else if(force) { + hashtable_unlock(hashtable); + return (LockFreeQueue<shm_msg_t> *) queue; } hashtable_unlock(hashtable); @@ -94,7 +98,7 @@ socket->socket_type = socket_type; socket->key = 0; socket->force_bind = false; - // socket->dispatch_thread = 0; + socket->queue = NULL; s = pthread_mutexattr_init(&mtxAttr); @@ -119,7 +123,10 @@ int s; logger->debug("shm_close_socket\n"); - _shm_close_dgram_socket(socket); + if(socket->queue != NULL) { + delete socket->queue; + socket->queue = NULL; + } s = pthread_mutex_destroy(&(socket->mutex) ); if(s != 0) { @@ -180,6 +187,7 @@ } sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind); if(sockt->queue == NULL ) { + logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key); return EBUS_KEY_INUSED; } } @@ -216,8 +224,12 @@ return 0; } else { mm_free(dest.buf); - logger->debug("====%d sendto key %d failed %s", shm_socket_get_key(sockt), key, bus_strerror(rv)); - return rv; + if(rv == ETIMEDOUT) + return EBUS_TIMEOUT; + else { + logger->debug("====%d sendto key %d failed %s", shm_socket_get_key(sockt), key, bus_strerror(rv)); + return rv; + } } } @@ -244,6 +256,7 @@ } sokt->queue = shm_socket_bind_queue( sokt->key, sokt->force_bind); if(sokt->queue == NULL ) { + logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sokt->key); return EBUS_KEY_INUSED; } } @@ -271,8 +284,13 @@ mm_free(src.buf); return 0; } else { - logger->debug("shm_recvfrom failed %s", bus_strerror(rv)); - return rv; + if(rv == ETIMEDOUT) + return EBUS_TIMEOUT; + else { + logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); + return rv; + } + } } @@ -423,15 +441,5 @@ // ============================================================================================================ - -int _shm_close_dgram_socket(shm_socket_t *socket){ - if(socket->queue != NULL) { - delete socket->queue; - socket->queue = NULL; - } - - return 0; -} - -- Gitblit v1.8.0