From 8e31c88671a1bae32cff31864ee24438fa2dfaac Mon Sep 17 00:00:00 2001 From: Patrick Lipka Date: Mon, 18 Aug 2025 17:41:20 +0200 Subject: [PATCH] add missing context management --- src/rvprof_context.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/rvprof_internal.h | 2 ++ 2 files changed, 43 insertions(+) create mode 100644 src/rvprof_context.c diff --git a/src/rvprof_context.c b/src/rvprof_context.c new file mode 100644 index 0000000..c4e5864 --- /dev/null +++ b/src/rvprof_context.c @@ -0,0 +1,41 @@ +#include "rvprof_internal.h" + +void rvprof_context_cleanup(void){ + if (!g_rvprof.initialized) { + return; + } + + // generate report + rvprof_output_generate_report(); + + // close output file + if (g_rvprof.output_file) { + fclose(g_rvprof.output_file); + g_rvprof.output_file = NULL; + } + + // clean up dynamic arrays + region_array_cleanup(&g_rvprof.regions); + function_stats_array_cleanup(&g_rvprof.functions); + stack_info_array_cleanup(&g_rvprof.stacks); + symbol_array_cleanup(&g_rvprof.symbols); + + // clean up configuration strings + if (g_rvprof.config.output_filename) { + rvprof_free(g_rvprof.config.output_filename, + strlen(g_rvprof.config.output_filename) + 1); + g_rvprof.config.output_filename = NULL; + } + + if (g_rvprof.config.program_name) { + rvprof_free(g_rvprof.config.program_name, + strlen(g_rvprof.config.program_name) + 1); + g_rvprof.config.program_name = NULL; + } + + // reset state + g_rvprof.initialized = 0; + g_rvprof.auto_initialized = 0; + + fprintf(stderr, "RVProf: Finalized\n"); +} diff --git a/src/rvprof_internal.h b/src/rvprof_internal.h index 2476873..8fd13c6 100644 --- a/src/rvprof_internal.h +++ b/src/rvprof_internal.h @@ -185,6 +185,8 @@ int rvprof_stats_get_or_create_stack_id(void); void rvprof_stats_add_stack_id_to_function(int func_id, int stack_id); void rvprof_stats_add_caller_to_function(int func_id, const char* caller); +// context management +void rvprof_context_cleanup(void); #ifdef __cplusplus }