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