summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-10-12 10:41:53 +0800
committerlijia <[email protected]>2021-10-12 10:41:53 +0800
commit4bf8b344cb5487055eb9ab653d896f797a4210f5 (patch)
tree14f0a0497f56fbaa1d9ae79744079e54ed798767
parenta493433f9126b9e9173e6a571fc7d921bd3bd516 (diff)
修复dumpfile-list退出时没有正确释放所有资源, 而直接调用exit的问题;v4.2.57
修复project ip_frag_list 功能开关解析错误问题;
-rw-r--r--src/packet_io/packet_io_pcap.c49
-rw-r--r--src/project/project_requirement.c4
2 files changed, 31 insertions, 22 deletions
diff --git a/src/packet_io/packet_io_pcap.c b/src/packet_io/packet_io_pcap.c
index d2dcfad..e42c24e 100644
--- a/src/packet_io/packet_io_pcap.c
+++ b/src/packet_io/packet_io_pcap.c
@@ -1394,11 +1394,6 @@ static void *pcap_io_thread(void *arg)
#endif
#endif
- if(sapp_get_cla_raw("dumpfile-list", &no_use) >= 0){
- pcap_io_dumpfile_list();
- exit(0);
- }
-
if(0 == (DIR_ROUTE_DOWN & route_dir)){
handle = pcap_up_handle;
stop_flag = &g_pcap_io_stop_flag_up;
@@ -1407,6 +1402,11 @@ static void *pcap_io_thread(void *arg)
stop_flag = &g_pcap_io_stop_flag_down;
}
+ if(sapp_get_cla_raw("dumpfile-list", &no_use) >= 0){
+ pcap_io_dumpfile_list();
+ goto thread_exit;
+ }
+
while(sapp_get_current_state() < SAPP_STATE_PROCESSING){
sapp_usleep(1000);
}
@@ -1434,13 +1434,14 @@ static void *pcap_io_thread(void *arg)
}
}
+thread_exit:
*stop_flag = 1;
sapp_usleep(10000);
if(g_pcap_exit_cb_fun){
(*g_pcap_exit_cb_fun)();
}
if(exit_prog_flag){
- exit(1);
+ exit(0);
}
return NULL;
@@ -1585,14 +1586,17 @@ void pcap_dl_io_run(void)
void pcap_dl_io_stop(void)
{
- if(g_pcap_io_pid_up != 0){
- pcap_breakloop(pcap_up_handle);
- pthread_join(g_pcap_io_pid_up, NULL);
- }
-
- if(g_pcap_io_pid_down){
- pcap_breakloop(pcap_down_handle);
- pthread_join(g_pcap_io_pid_down, NULL);
+ char *no_use;
+ if(sapp_get_cla_raw("dumpfile-list", &no_use) < 0){
+ if(pcap_up_handle){
+ pcap_breakloop(pcap_up_handle);
+ pthread_join(g_pcap_io_pid_up, NULL);
+ }
+
+ if(pcap_down_handle){
+ pcap_breakloop(pcap_down_handle);
+ pthread_join(g_pcap_io_pid_down, NULL);
+ }
}
}
@@ -1600,15 +1604,18 @@ void pcap_dl_io_stop(void)
void pcap_dl_io_destroy(void)
{
int i;
+ char *no_use;
- if(pcap_up_handle){
- pcap_close(pcap_up_handle);
- pcap_up_handle = NULL;
+ if(sapp_get_cla_raw("dumpfile-list", &no_use) < 0){
+ if(pcap_up_handle){
+ pcap_close(pcap_up_handle);
+ pcap_up_handle = NULL;
+ }
+ if(pcap_down_handle){
+ pcap_close(pcap_down_handle);
+ pcap_down_handle = NULL;
+ }
}
- if(pcap_down_handle){
- pcap_close(pcap_down_handle);
- pcap_down_handle = NULL;
- }
for(i = 0; i < g_pcap_work_thread_num; i++){
while(MESA_lqueue_get_count(work_thread_pool[i].pkt_queue)){
diff --git a/src/project/project_requirement.c b/src/project/project_requirement.c
index 9661702..ede1a7b 100644
--- a/src/project/project_requirement.c
+++ b/src/project/project_requirement.c
@@ -240,6 +240,7 @@ static int project_req_conf_is_exist(const char *check_name)
FILE *fp;
char *preq_name;
int line_num = 0;
+ int section_is_exist = 0;
fp = fopen(ABBR_PROJECT_LIST_CONF_FILE, "r");
if(NULL == fp){
@@ -261,6 +262,7 @@ static int project_req_conf_is_exist(const char *check_name)
}
if(strncasecmp(preq_name, check_name, strlen(preq_name)) == 0){
+ section_is_exist = 1;
goto fun_exit;
}
@@ -271,7 +273,7 @@ static int project_req_conf_is_exist(const char *check_name)
fun_exit:
fclose(fp);
- return 0;
+ return section_is_exist;
}