From d52c87dee3aac4af66ad2e1a86094ca27209d816 Mon Sep 17 00:00:00 2001 From: fujuntang <fujuntang@smartai.com> Date: 星期二, 16 十一月 2021 16:19:45 +0800 Subject: [PATCH] Fix the service manager exits exceptionally issue. --- src/bh_api.cpp | 34 ++++++++++++++++++++++++++++------ 1 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/bh_api.cpp b/src/bh_api.cpp index c74c80d..b768e7e 100644 --- a/src/bh_api.cpp +++ b/src/bh_api.cpp @@ -3,6 +3,7 @@ #include "bus_server_socket_wrapper.h" #include "shm_mm_wrapper.h" #include "proc_def.h" +#include "mm.h" #include "usg_common.h" #include "bh_api.h" #include <pthread.h> @@ -17,6 +18,7 @@ static Logger *logger = LoggerFactory::getLogger(); static int gRun_stat = 0; +static int gRun_flag = true; static void *gNetmod_socket = NULL; static pthread_mutex_t mutex; @@ -39,21 +41,22 @@ nsec = 0; sprintf(buf, "%s", STR_EXEC); data = net_mod_socket_int_get(gNetmod_socket); - while(true) { + while(gRun_flag == true) { rv = net_mod_socket_recvfrom(gNetmod_socket, &buf_temp, &size, &key, SVR_STR, data); if (rv == 0) { - BHFree(buf_temp, size); + if (strncmp((char *)buf_temp, STR_RET, strlen(STR_RET)) != 0) { - if ((gNetmod_socket != NULL) && (gRun_stat != 0)) { rv = net_mod_socket_sendto_timeout(gNetmod_socket, buf, strlen(buf), key, sec, nsec, SVR_STR, data); if (rv != 0) { logger->error("the process check response failed with error: %s!\n", bus_strerror(rv)); } } else { - break; + gRun_flag = false; } + + BHFree(buf_temp, size); } else { @@ -234,6 +237,7 @@ #endif if (rv == 0) { + gRun_flag = true; pthread_create(&gTids, NULL, client_run_check, NULL); return true; @@ -246,8 +250,11 @@ { int rv; int min; + int data; + int diff; void *buf = NULL; char *errString = NULL; + struct timeval start, end; #if defined(PRO_DE_SERIALIZE) struct _ProcInfo_proto @@ -295,7 +302,23 @@ if (rv == 0) { rv = net_mod_socket_reg(gNetmod_socket, NULL, 0, NULL, 0, timeout_ms, PROC_UNREG); if (rv == 0) { - + gettimeofday(&start, NULL); + data = net_mod_socket_int_get(gNetmod_socket); + rv = net_mod_socket_sendto_timeout(gNetmod_socket, STR_RET, strlen(STR_RET), data, 3, 0); + if (rv != 0) { + logger->error("the process check response failed with error: %s!\n", bus_strerror(rv)); + } + + while(gRun_flag == true) { + sleep(1); + + gettimeofday(&end, NULL); + + diff = end.tv_sec - start.tv_sec; + if (diff >= TIME_DUR) + break; + }; + net_mod_socket_close(gNetmod_socket); gNetmod_socket = NULL; @@ -1465,7 +1488,6 @@ str = buf_temp; val = net_mod_socket_buf_data_get(gNetmod_socket, str); if(val > 0) { - rv = 0; } else { -- Gitblit v1.8.0