diff options
| author | lijia <[email protected]> | 2021-09-09 17:19:51 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2021-09-09 17:19:51 +0800 |
| commit | 00afae66aa07534518ccf452fcff7ba2d1b10cb9 (patch) | |
| tree | 60abb8391523adbc6ce92bc78d4a79b8ee4fe5ea /src/sapp_dev | |
| parent | 908cda2ef90d92d15d89b2b1fb659296e736b9f1 (diff) | |
TSG-7425, sapp支持释放所有资源而不退出当前进程, 便于做单元测试.
Diffstat (limited to 'src/sapp_dev')
| -rw-r--r-- | src/sapp_dev/sapp_global_val.c | 90 | ||||
| -rw-r--r-- | src/sapp_dev/sapp_init.c | 14 | ||||
| -rw-r--r-- | src/sapp_dev/sapp_plug.c | 31 |
3 files changed, 130 insertions, 5 deletions
diff --git a/src/sapp_dev/sapp_global_val.c b/src/sapp_dev/sapp_global_val.c index 717bb6d..37013ba 100644 --- a/src/sapp_dev/sapp_global_val.c +++ b/src/sapp_dev/sapp_global_val.c @@ -215,6 +215,96 @@ void sapp_global_val_sanity_check(void) } +void sapp_gval_init(void) +{ + int tseq; + + sapp_global_val = (sapp_global_t *)calloc(1, sizeof(sapp_global_t)); + sapp_global_val->individual_volatile = (sapp_gval_individual_volatile_t *)calloc(1, sizeof(sapp_gval_individual_volatile_t)); + + for(tseq = 0; tseq < SAPP_MAX_THREADS; tseq++){ + sapp_global_val->mthread_volatile[tseq] = (sapp_gval_mthread_t *)calloc(1, sizeof(sapp_gval_mthread_t)); + sapp_global_val->individual_fixed.cpu_bind_core_id_per_thread[tseq] = -1; /* ��ʼ������Ϊ-1, ��ʾû���κ�һ��cpu core */ + } + + /* set default value, maybe not input by user or config file */ + snprintf(sapp_global_val->config.packet_io.pcap_dumpfile_name, NAME_MAX, "dumpfile"); + + ABBR_CURRENT_TIME = time(NULL); +} + +void sapp_gval_destroy(void) +{ + int tseq; + + if(sapp_global_val->individual_volatile){ + SAPP_FREE(sapp_global_val->individual_volatile); + } + + for(tseq = 0; tseq < SAPP_MAX_THREADS; tseq++){ + SAPP_FREE(sapp_global_val->mthread_volatile[tseq]); + } + + if(sapp_global_val->cla.cmd_args_array){ + int i, args_num = sapp_global_val->cla.cmd_args_num; + sapp_cmd_args_val_t *free_opt; + + for(i = 0; i < args_num; i++){ + free_opt = sapp_global_val->cla.cmd_args_array[i]; + SAPP_FREE(free_opt->long_opt_name); + SAPP_FREE(free_opt->arg_val.string_value); + } + + sapp_mem_free(sapp_global_val->cla.cmd_args_array);//�˴�ʹ����realloc��, Ҫ��sapp_mem_free() + sapp_global_val->cla.cmd_args_array = NULL; + } + + sapp_config_file_link_t *pconfig = &sapp_global_val->config.cfg_file_path; + SAPP_FREE(pconfig->cfg_files_root_dir); + SAPP_FREE(pconfig->cfg_main_entry_relative); + SAPP_FREE(pconfig->cfg_main_entry_absolute); + SAPP_FREE(pconfig->cfg_sapp_log_relative); + SAPP_FREE(pconfig->cfg_sapp_log_absolute); + SAPP_FREE(pconfig->cfg_plug_list_relative); + SAPP_FREE(pconfig->cfg_plug_list_absolute); + SAPP_FREE(pconfig->cfg_project_list_relative); + SAPP_FREE(pconfig->cfg_project_list_absolute); + SAPP_FREE(pconfig->cfg_file_send_raw_pkt_relative); + SAPP_FREE(pconfig->cfg_file_send_raw_pkt_absolute); + SAPP_FREE(pconfig->cfg_file_vxlan_sport_map_relative); + SAPP_FREE(pconfig->cfg_file_vxlan_sport_map_absolute); + SAPP_FREE(pconfig->cfg_file_inline_dev_relative); + SAPP_FREE(pconfig->cfg_file_inline_dev_absolute); + SAPP_FREE(pconfig->cfg_file_necessary_plug_relative); + SAPP_FREE(pconfig->cfg_file_necessary_plug_absolute); + SAPP_FREE(pconfig->cfg_file_stream_compare_layer_relative); + SAPP_FREE(pconfig->cfg_file_stream_compare_layer_absolute); + SAPP_FREE(pconfig->cfg_file_vlan_flipping_relative); + SAPP_FREE(pconfig->cfg_file_vlan_flipping_absolute); + SAPP_FREE(pconfig->cfg_file_asymmetric_addr_layer_relative); + SAPP_FREE(pconfig->cfg_file_asymmetric_addr_layer_absolute); + SAPP_FREE(pconfig->cfg_file_well_known_port_relative); + SAPP_FREE(pconfig->cfg_file_well_known_port_absolute); + + sapp_data_file_link_t *pdata = &sapp_global_val->config.data_file_path; + SAPP_FREE(pdata->data_files_root_dir); + SAPP_FREE(pdata->data_sapp_sysinfo_log_relative); + SAPP_FREE(pdata->data_sapp_sysinfo_log_absolute); + SAPP_FREE(pdata->data_sapp_fs2_log_relative); + SAPP_FREE(pdata->data_sapp_fs2_log_absolute); + SAPP_FREE(pdata->data_inline_keepalive_log_relative); + SAPP_FREE(pdata->data_inline_keepalive_log_absolute); + SAPP_FREE(pdata->data_load_plugin_stat_log_relative); + SAPP_FREE(pdata->data_load_plugin_stat_log_absolute); + SAPP_FREE(pdata->data_under_ddos_stat_log_relative); + SAPP_FREE(pdata->data_under_ddos_stat_log_absolute); + + SAPP_FREE(sapp_global_val->config.library_file_path.libmarsio_file_path); + + memset((void *)sapp_global_val, 0, sizeof(sapp_global_t)); + SAPP_FREE(sapp_global_val); +} + #ifdef __cplusplus } diff --git a/src/sapp_dev/sapp_init.c b/src/sapp_dev/sapp_init.c index 0220e81..cca84b9 100644 --- a/src/sapp_dev/sapp_init.c +++ b/src/sapp_dev/sapp_init.c @@ -56,9 +56,10 @@ extern int sapp_assistant_init(void); extern char gdev_keepalive_ip_entry(const struct streaminfo *pstream,unsigned char routedir,int thread_seq, const struct mesa_ip4_hdr *ipv4_hdr); extern char gdev_keepalive_udp_entry(const struct streaminfo *a_udp, void **pme, int thread_seq, const void *ip_hdr); +static int _check_exit_cap_mode; static void forbid_call_exit_in_running_state(void) { - if(g_packet_io_cap_mode != CAP_MODEL_PCAP_DUMPFILE){ + if(_check_exit_cap_mode != CAP_MODEL_PCAP_DUMPFILE){ printf("\033[41mCall exit() in running state is forbidden!!\033[0m\n"); abort(); } @@ -346,7 +347,10 @@ void MESA_platform_run(void) /* ʹ��atexit()ע��ĺ���, ������ע�ắ���෴, ���Ծ������Ӻ�atexit()ע��λ��, �������г�ʼ�����֮��, packet_io_run()֮ǰ�� + + ������sapp_gval_destroy()֮��, ȫ�ֱ���sapp_global_val����free��, �˴���ʱ��һ��. */ + _check_exit_cap_mode = g_packet_io_cap_mode; atexit(forbid_call_exit_in_running_state); __sapp_timer_platform_run(); @@ -354,10 +358,10 @@ void MESA_platform_run(void) packet_io_run(); sapp_set_current_state(SAPP_STATE_PROCESSING); - /* If TFE is run by systemd's notify, then tell the systemd our tfe is ready. - * and disable the stderr log, only print logs into files */ - if (check_is_started_by_notify()) - { + /* + If sapp is started by systemd with notify, then tell the systemd sapp is ready. + */ + if (check_is_started_by_notify()){ sd_notify(0, "READY=1"); sleep(1); } diff --git a/src/sapp_dev/sapp_plug.c b/src/sapp_dev/sapp_plug.c index 50abf92..20df1ab 100644 --- a/src/sapp_dev/sapp_plug.c +++ b/src/sapp_dev/sapp_plug.c @@ -122,6 +122,37 @@ int libsapp_setup_env(int argc, char *argv[]) } +static void wait_for_all_io_threads(void) +{ + int tseq; + + for(tseq = 0; tseq < g_packet_io_thread_num; tseq++){ + pthread_join(sapp_global_val->individual_fixed.thread_obtain_id[tseq], NULL); + } + + pthread_join(sapp_global_val->individual_fixed.thread_timer_event_id, NULL); +} + + + +void libsapp_destroy_env_per_thread(int tseq) +{ + +} + + + + +void libsapp_destroy_env(void) +{ + sapp_set_current_state(SAPP_STATE_READY_TO_EXIT); + + wait_for_all_io_threads(); + + packet_io_exit(); +} + + #ifdef __cplusplus } #endif |
