summaryrefslogtreecommitdiff
path: root/src/sapp_dev
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-09-23 17:20:19 +0800
committerlijia <[email protected]>2021-09-23 17:20:19 +0800
commit86156ab004072179dfc34fb63c3ba437d5688db3 (patch)
tree3627934f2ebc00d0d4f93bff8106cadaa2861ee9 /src/sapp_dev
parentbcd30b7ea3e7a8d486ae66bd015152ec78bf3e74 (diff)
TSG-7425, sapp支持不退出进程而释放所有资源.
Diffstat (limited to 'src/sapp_dev')
-rw-r--r--src/sapp_dev/sapp_init.c2
-rw-r--r--src/sapp_dev/sapp_plug.c41
2 files changed, 36 insertions, 7 deletions
diff --git a/src/sapp_dev/sapp_init.c b/src/sapp_dev/sapp_init.c
index 07618cd..14b7f0d 100644
--- a/src/sapp_dev/sapp_init.c
+++ b/src/sapp_dev/sapp_init.c
@@ -238,8 +238,8 @@ int MESA_platform_init(int argc, char *argv[])
timestamp_record_init();
/* timer must before packet_io and plug_proc() */
- __sapp_timer_platform_init();
+ __sapp_timer_platform_init();
#if 1
if(cycle_pkt_dump_init(argc , argv) < 0){
diff --git a/src/sapp_dev/sapp_plug.c b/src/sapp_dev/sapp_plug.c
index f879e1a..4e3d8f1 100644
--- a/src/sapp_dev/sapp_plug.c
+++ b/src/sapp_dev/sapp_plug.c
@@ -27,7 +27,7 @@ int dpdk_init(int argc, char **argv);
/*
��Щ�������ܷ���sapp_global_val, �����ж�destroy����״̬��, destroy��������Ҫfree sapp_global_val������!
- 0:do nothing; 1:doing; 0x7FFFFFFF:done
+ 0:do nothing; 1:doing; 0x7FFFF:done
*/
static volatile unsigned long g_destory_env_done;
@@ -75,12 +75,29 @@ static void show_mesa_log(void)
sapp_runtime_log(30, "\n\n%s", MESA_art_log);
}
+static void sapp_wait_for_required_thread_starting(void)
+{
+ int tseq;
+
+ for(tseq = 0; tseq < g_packet_io_thread_num; tseq++){
+ while(sapp_global_val->individual_fixed.thread_obtain_id[tseq] == 0){
+ sapp_usleep(10);
+ }
+ }
+
+ while(sapp_global_val->individual_fixed.thread_timer_event_id == 0){
+ sapp_usleep(10);
+ }
+}
+
int libsapp_setup_env(int argc, char *argv[])
{
int ret;
MESA_ATOMIC_SET(g_destory_env_done, 0);
+ memset((void *)g_destory_env_per_thread_done, 0, sizeof(g_destory_env_per_thread_done));
+
sapp_gval_init();
sapp_set_current_state(SAPP_STATE_JUST_START);
sapp_set_current_state(SAPP_STATE_CONFIG_PARSE);
@@ -127,6 +144,8 @@ int libsapp_setup_env(int argc, char *argv[])
MESA_platform_run();
+ sapp_wait_for_required_thread_starting();
+
//TODO: dumpfileģʽ���������Զ��˳�, ����һֱ����
//�������ź�, �����������߳�ǿ�е���sapp_destroy_env()
#if 0
@@ -148,6 +167,8 @@ static void wait_for_all_io_threads(void)
}
pthread_join(sapp_global_val->individual_fixed.thread_timer_event_id, NULL);
+
+ sapp_timer_destroy(sapp_global_val->individual_fixed.sapp_standalone_timer);
}
@@ -156,7 +177,7 @@ void libsapp_destroy_env_per_thread(int tseq)
{
if(MESA_ATOMIC_INC(g_destory_env_per_thread_done[tseq]) != 1){
/* INC����1, ˵��ԭ���϶�����0, ˵��������һ���߳�������destroy����, �����ȴ�, ֱ������Ϊֹ */
- while(MESA_ATOMIC_READ(g_destory_env_per_thread_done[tseq]) != 0x7FFFFFFF){
+ while(MESA_ATOMIC_READ(g_destory_env_per_thread_done[tseq]) != 0x7FFFF){
sapp_usleep(100);
}
return;
@@ -165,7 +186,7 @@ void libsapp_destroy_env_per_thread(int tseq)
}
packet_io_clean_thread_context(tseq);
- MESA_ATOMIC_SET(g_destory_env_per_thread_done[tseq], 0x7FFFFFFF);
+ MESA_ATOMIC_SET(g_destory_env_per_thread_done[tseq], 0x7FFFF);
}
@@ -173,6 +194,8 @@ void libsapp_destroy_env_per_thread(int tseq)
void libsapp_destroy_env(void)
{
+ int exit_process = 0;
+
/*
һ���������: sapp -d������Ϻ�, ���Զ�����libsapp_destroy_env(),
���Dz��Ҳ���ܻ����ⲿ��������libsapp_destroy_env(),
@@ -182,7 +205,7 @@ void libsapp_destroy_env(void)
if(MESA_ATOMIC_INC(g_destory_env_done) != 1){
/* INC����1, ˵��ԭ���϶�����0, ˵��������һ���߳�������destroy����, �����ȴ�, ֱ������Ϊֹ */
- while(MESA_ATOMIC_READ(g_destory_env_done) != 0x7FFFFFFF){
+ while(MESA_ATOMIC_READ(g_destory_env_done) != 0x7FFFF){
sapp_usleep(100);
}
return;
@@ -190,7 +213,9 @@ void libsapp_destroy_env(void)
MESA_ATOMIC_SET(g_destory_env_done, 1);
}
- MESA_ATOMIC_SET(g_destory_env_done, 1);
+ if(CAP_MODEL_PCAP_DUMPFILE == g_packet_io_cap_mode){
+ exit_process = 1;
+ }
sapp_set_current_state(SAPP_STATE_READY_TO_EXIT);
@@ -198,7 +223,11 @@ void libsapp_destroy_env(void)
packet_io_exit();
- MESA_ATOMIC_SET(g_destory_env_done, 0x7FFFFFFF);
+ MESA_ATOMIC_SET(g_destory_env_done, 0x7FFFF);
+
+ if(exit_process){
+ exit(0);
+ }
}