diff options
| author | yangwei <[email protected]> | 2024-03-26 14:29:43 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2024-03-26 14:29:43 +0800 |
| commit | 4e46080fd9f2119c9f33b2f5019e57549da22f93 (patch) | |
| tree | 5c1926b490acb6b61b9571318a127874786bc3db | |
| parent | b3a528fcd8dc3b1119d33dc464c86a02a442640f (diff) | |
✨ feat(signal handle): 使用sigaction仅在主线程处理性能统计信号
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/sapp_dev/sapp_plug.c | 54 |
2 files changed, 50 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e4a4f53..0e17282 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -304,6 +304,9 @@ install(FILES ${CMAKE_BINARY_DIR}/test/test_app_sapp.so DESTINATION plug/busines install(PROGRAMS ${CMAKE_BINARY_DIR}/tools/stream_id_decode DESTINATION ./tools/ COMPONENT EXECUTABLE) install(PROGRAMS ${CMAKE_BINARY_DIR}/module_test/plugin_test_main/plugin_test_main DESTINATION ./tools/ COMPONENT EXECUTABLE) +if(MEM_POOL STREQUAL "JEMALLOC_STATIC") + install(PROGRAMS ${CMAKE_BINARY_DIR}/vendor/libjemalloc/bin/jeprof DESTINATION ./tools/ COMPONENT EXECUTABLE) +endif() install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream.h DESTINATION /opt/MESA/include/MESA/ COMPONENT HEADER) install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_base.h DESTINATION /opt/MESA/include/MESA/stream_inc COMPONENT HEADER) diff --git a/src/sapp_dev/sapp_plug.c b/src/sapp_dev/sapp_plug.c index 5d54c31..b088ed4 100644 --- a/src/sapp_dev/sapp_plug.c +++ b/src/sapp_dev/sapp_plug.c @@ -92,10 +92,12 @@ static void signal_usr2_handler(int signo) free(symbols); } + static void signal_nouse_handler(int signo) { printf("%s, SIGNAL:%d recviced!\n", __FUNCTION__, signo); #if defined(USE_JEMALLOC) + #include "tomlc99_wrap.h" #include "jemalloc/jemalloc.h" bool active = true; int ret; @@ -103,7 +105,9 @@ static void signal_nouse_handler(int signo) printf("mallctl prof.dump return %d\n", ret); ret=mallctl("prof.active", NULL, NULL, &active, sizeof(bool)); printf("mallctl prof.active:%d return %d\n", active, ret); - sleep(sapp_global_val->config.profiling.memory_used_stat_interval_s); + int prof_interval_s=10; + tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"profiling.memory", (char *)"memory_used_stat_interval_s", (int *)&prof_interval_s, 10); + sleep(prof_interval_s); active = false; ret=mallctl("prof.active", NULL, NULL, &active, sizeof(bool)); printf("mallctl prof.active:%d return %d\n", active, ret); @@ -113,15 +117,50 @@ static void signal_nouse_handler(int signo) #endif } -static void signal_take_over(void) + +sigset_t takeover_signal_set; +static void signal_take_over_start(void) { - signal(SIGHUP, signal_hup_handler); - signal(SIGTERM, signal_term_handler); - signal(SIGUSR1, signal_usr1_handler); + sigemptyset(&takeover_signal_set); + sigaddset(&takeover_signal_set, SIGHUP); + sigaddset(&takeover_signal_set, SIGTERM); + sigaddset(&takeover_signal_set, SIGUSR1); + sigaddset(&takeover_signal_set, SIGSYS); + + pthread_sigmask(SIG_BLOCK, &takeover_signal_set, NULL); + + struct sigaction sa; + sa.sa_handler = signal_hup_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGHUP, &sa, NULL); + + sa.sa_handler = signal_term_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGTERM, &sa, NULL); + + sa.sa_handler = signal_usr1_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGUSR1, &sa, NULL); + + sa.sa_handler = signal_nouse_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGSYS, &sa, NULL); + + //signal(SIGSYS, signal_nouse_handler); + //signal(SIGHUP, signal_hup_handler); + //signal(SIGTERM, signal_term_handler); + //signal(SIGUSR1, signal_usr1_handler); signal(SIGUSR2, signal_usr2_handler); - signal(SIGSYS, signal_nouse_handler); } +static void signal_take_over_finish(void) +{ + pthread_sigmask(SIG_UNBLOCK, &takeover_signal_set, NULL); +} static void show_mesa_log(void) { @@ -269,7 +308,7 @@ int libsapp_setup_env(int argc, char *argv[]) #endif sapp_init_breakpad_mini(); - signal_take_over(); + signal_take_over_start(); if(MESA_platform_init(argc, argv) < 0){ return -1; @@ -291,6 +330,7 @@ int libsapp_setup_env(int argc, char *argv[]) pthread_create(&pid, NULL, sapp_monitor_thread, NULL); pthread_detach(pid); } + signal_take_over_finish(); return 0; } |
