diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h index d886bcec..3889c66e 100644 --- a/include/mimalloc-internal.h +++ b/include/mimalloc-internal.h @@ -27,6 +27,7 @@ void _mi_error_message(const char* fmt, ...); void _mi_warning_message(const char* fmt, ...); void _mi_verbose_message(const char* fmt, ...); void _mi_trace_message(const char* fmt, ...); +void _mi_options_init(void); // "init.c" extern mi_stats_t _mi_stats_main; diff --git a/src/init.c b/src/init.c index 290caeec..4c7fdda0 100644 --- a/src/init.c +++ b/src/init.c @@ -416,6 +416,7 @@ static void mi_allocator_done() { static void mi_process_load(void) { os_preloading = false; atexit(&mi_process_done); + _mi_options_init(); mi_process_init(); //mi_stats_reset(); if (mi_redirected) _mi_verbose_message("malloc is redirected.\n"); diff --git a/src/options.c b/src/options.c index 88f2503e..16c50f11 100644 --- a/src/options.c +++ b/src/options.c @@ -73,6 +73,13 @@ static mi_option_desc_t options[_mi_option_last] = static void mi_option_init(mi_option_desc_t* desc); +void _mi_options_init(void) { + // called on process load + for(int i = 0; i < _mi_option_last; i++ ) { + mi_option_get((mi_option_t)i); // initialize + } +} + long mi_option_get(mi_option_t option) { mi_assert(option >= 0 && option < _mi_option_last); mi_option_desc_t* desc = &options[option];