diff --git a/src/rvprof_core.c b/src/rvprof_core.c index e4b855e..46ddcba 100644 --- a/src/rvprof_core.c +++ b/src/rvprof_core.c @@ -1,5 +1,18 @@ #include "rvprof_internal.h" +static void rvprof_atexit_handler(void){ + if(g_rvprof.initialized) rvprof_context_cleanup(); +} + +static void register_atexit_handler(void){ + static int registered = 0; + if (!registered){ + atexit(rvprof_atexit_handler); + registered = 1; + } +} + + void rvprof_init(const char* output_file){ if (g_rvprof.initialized) return; @@ -56,4 +69,7 @@ void rvprof_init(const char* output_file){ memset(&g_rvprof.regions, 0, sizeof(g_rvprof.regions)); memset(&g_rvprof.functions, 0, sizeof(g_rvprof.functions)); memset(&g_rvprof.stacks,0,sizeof(g_rvprof.stacks)); + + // register atexit handler to automate cleanup + register_atexit_handler(); } \ No newline at end of file