From c479ef57baaaa28964fc3ec8d80ff99dffa7d49f Mon Sep 17 00:00:00 2001
From: fujuntang <fujuntang@smartai.com>
Date: 星期三, 10 十一月 2021 09:49:29 +0800
Subject: [PATCH] Fix the system hang issue when the app is killed contantly.

---
 src/socket/shm_socket.cpp |   37 ++++++++++++++++++-------------------
 1 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 709505f..ae9a98b 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -2,10 +2,12 @@
 #include "socket_def.h"
 #include "hashtable.h"
 #include "logger_factory.h"
+#include "net_mod_socket_wrapper.h"
 #include <map>
 #include <cassert>
 #include "bus_error.h"
 #include "sole.h"
+#include "bh_api.h"
 #include "shm_mm.h"
 #include "key_def.h"
 
@@ -105,9 +107,6 @@
 
 
 static int _shm_socket_close_(shm_socket_t *sockt) {
-  
-  int rv, i;
-  hashtable_t *hashtable = mm_get_hashtable();
 
   // if(sockt->key != 0) {
   //   auto it =  shmQueueStMap->find(sockt->key);
@@ -117,18 +116,6 @@
   //   }
   // }
 
-  if(sockt->queue != NULL) {
-    sockt->queue->close();
-    for( i = 0; i < sockt->queue->size(); i++) {
-      mm_free((*(sockt->queue))[i].buf);
-      logger->info("======= %d free queue element buf\n", sockt->key);
-    }
-    sleep(1);
-
-    hashtable_remove(hashtable, sockt->key);
-  //   sockt->queue = NULL;
-  }
- 
   pthread_mutex_destroy(&(sockt->mutex) );
   free(sockt);
   return 0;
@@ -404,13 +391,16 @@
                     const int send_size, const int key, void **recv_buf,
                     int *recv_size,  const struct timespec *timeout,  int flags) {
   
- 
+  int data;
+  int timeout_ms;
+  char data_buf[MAX_STR_LEN] = { 0x00 };
   int rv = 0, tryn = 16;
   shm_packet_t sendpak;
   shm_packet_t recvpak;
   std::map<int, shm_packet_t>::iterator recvbufIter;
   shm_socket_t *tmp_socket = NULL;
- 
+  hashtable_t *hashtable = mm_get_hashtable();
+
   rv = pthread_once(&_once_, _create_threadlocal_socket_key_);
   if (rv != 0) {
     logger->error(rv, "shm_sendandrecv pthread_once");
@@ -421,7 +411,15 @@
   if (tmp_socket == NULL)
   {
     tmp_socket = shm_socket_open(SHM_SOCKET_DGRAM);
-    
+   
+    tmp_socket->key = hashtable_alloc_key(hashtable);
+    data = inter_key_get();
+    timeout_ms = timeout->tv_sec * 1000 + 3000;
+    sprintf(data_buf, "%d, %d", data, tmp_socket->key);
+    if (socket_data_get() != NULL) {
+      net_mod_socket_reg(socket_data_get(), data_buf, strlen(data_buf), NULL, 0, timeout_ms, PROC_REG_BUF);
+    }
+
     rv =  pthread_setspecific(_localthread_socket_key_, tmp_socket);
     if ( rv != 0) {
       logger->error(rv, "shm_sendandrecv : pthread_setspecific");
@@ -564,6 +562,7 @@
       if (sockt->key == 0) {
         sockt->key = hashtable_alloc_key(hashtable);
       }
+
       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);
@@ -729,7 +728,7 @@
   count += strlen(ptr->int_info) + 1;
   memcpy(dst + count, ptr->svr_info, strlen(ptr->svr_info) + 1);
   count += strlen(ptr->svr_info) + 1;
-
+  
   *counter = count;
 }
 

--
Gitblit v1.8.0