diff options
| author | lijia <[email protected]> | 2021-09-23 09:54:44 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2021-09-23 09:54:44 +0800 |
| commit | bcd30b7ea3e7a8d486ae66bd015152ec78bf3e74 (patch) | |
| tree | 652491bd71c34196b5891d7dd4354a2ffca4c3e8 /src/sapp_dev | |
| parent | 140cdc5521f57bf558e8dd7f77c5297d37f9d983 (diff) | |
| parent | 0801d601e00d8e98ad3899453c3aaf7befe58cba (diff) | |
Merge remote-tracking branch 'remotes/origin/feature-v4.2-destroy-but-not-exit' into dev-4.2
# Conflicts:
# include/private/sapp_mem.h
# include/private/stream_internal.h
# src/common/sapp_mem.c
# src/plugin/src/plugin_manage.c
Diffstat (limited to 'src/sapp_dev')
| -rw-r--r-- | src/sapp_dev/sapp_init.c | 2 | ||||
| -rw-r--r-- | src/sapp_dev/sapp_plug.c | 50 |
2 files changed, 44 insertions, 8 deletions
diff --git a/src/sapp_dev/sapp_init.c b/src/sapp_dev/sapp_init.c index cca84b9..07618cd 100644 --- a/src/sapp_dev/sapp_init.c +++ b/src/sapp_dev/sapp_init.c @@ -79,7 +79,7 @@ static void sapp_dictator_init(void) assert(tmp != NULL); free(tmp); }else{ - printf("\033[33m[Warning]dictator is not enable, maybe degrade performance, please check 'sapp.toml -> dictator_enable'.\033[0m\n"); + printf("\033[33m[Warning]dictator is not enable, maybe slow down performance, please check 'sapp.toml -> dictator_enable'.\033[0m\n"); } #else printf("\033[33m[Warning]sapp is compiled without dictator.\033[0m\n"); diff --git a/src/sapp_dev/sapp_plug.c b/src/sapp_dev/sapp_plug.c index 097d654..f879e1a 100644 --- a/src/sapp_dev/sapp_plug.c +++ b/src/sapp_dev/sapp_plug.c @@ -25,6 +25,14 @@ void MESA_platform_run(void); extern int sapp_args_v; int dpdk_init(int argc, char **argv); +/* + ��Щ�������ܷ���sapp_global_val, �����ж�destroy����״̬��, destroy��������Ҫfree sapp_global_val������! + 0:do nothing; 1:doing; 0x7FFFFFFF:done +*/ + +static volatile unsigned long g_destory_env_done; +static volatile unsigned long g_destory_env_per_thread_done[MAX_THREAD_NUM]; + static void signal_user_handler(int signo) { @@ -71,7 +79,8 @@ static void show_mesa_log(void) int libsapp_setup_env(int argc, char *argv[]) { int ret; - + + MESA_ATOMIC_SET(g_destory_env_done, 0); sapp_gval_init(); sapp_set_current_state(SAPP_STATE_JUST_START); sapp_set_current_state(SAPP_STATE_CONFIG_PARSE); @@ -118,6 +127,14 @@ int libsapp_setup_env(int argc, char *argv[]) MESA_platform_run(); + //TODO: dumpfileģʽ���������Զ��˳�, ����һֱ���� + //�������ź�, �����������߳�ǿ�е���sapp_destroy_env() +#if 0 + while((SAPP_STATE_PROCESSING == sapp_global_val->individual_volatile->current_state) + && (sapp_global_val->config.packet_io.depolyment_mode_bin)){ + usleep(1); + } +#endif return 0; } @@ -137,13 +154,18 @@ static void wait_for_all_io_threads(void) void libsapp_destroy_env_per_thread(int tseq) { - if(sapp_global_val->mthread_volatile[tseq]->destory_env_done){ + 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){ + sapp_usleep(100); + } return; + }else{ + MESA_ATOMIC_SET(g_destory_env_per_thread_done[tseq], 1); } - sapp_global_val->mthread_volatile[tseq]->destory_env_done = 1; packet_io_clean_thread_context(tseq); - sapp_global_val->mthread_volatile[tseq]->destory_env_done = 2; + MESA_ATOMIC_SET(g_destory_env_per_thread_done[tseq], 0x7FFFFFFF); } @@ -151,18 +173,32 @@ void libsapp_destroy_env_per_thread(int tseq) void libsapp_destroy_env(void) { - if(sapp_global_val->individual_volatile->destory_env_done){ + /* + һ���������: sapp -d������Ϻ�, ���Զ�����libsapp_destroy_env(), + ���Dz��Ҳ���ܻ����ⲿ��������libsapp_destroy_env(), + �����������, ��double free��!! + �˴�����������һ���Ⱥ���˳��. + */ + + if(MESA_ATOMIC_INC(g_destory_env_done) != 1){ + /* INC����1, ˵��ԭ���϶�����0, ˵��������һ���߳�������destroy����, �����ȴ�, ֱ������Ϊֹ */ + while(MESA_ATOMIC_READ(g_destory_env_done) != 0x7FFFFFFF){ + sapp_usleep(100); + } return; + }else{ + MESA_ATOMIC_SET(g_destory_env_done, 1); } - sapp_global_val->individual_volatile->destory_env_done = 1; + MESA_ATOMIC_SET(g_destory_env_done, 1); + sapp_set_current_state(SAPP_STATE_READY_TO_EXIT); wait_for_all_io_threads(); packet_io_exit(); - sapp_global_val->individual_volatile->destory_env_done = 2; + MESA_ATOMIC_SET(g_destory_env_done, 0x7FFFFFFF); } |
