From 069208b184acb0e7f2f57bacab293d08cfacfa06 Mon Sep 17 00:00:00 2001 From: daan Date: Wed, 3 Jul 2019 19:47:44 -0700 Subject: [PATCH] Possible fix to windows dynamic override calling register onexit directly --- src/alloc-override-win.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/alloc-override-win.c b/src/alloc-override-win.c index cd1953c8..750f60b8 100644 --- a/src/alloc-override-win.c +++ b/src/alloc-override-win.c @@ -261,14 +261,18 @@ static int mi_register_atexit(exit_list_t* list, cbfun_t* fn) { } // Register a global `atexit` function -static int mi__crt_atexit(cbfun_t* fn) { +static int mi_atexit(cbfun_t* fn) { return mi_register_atexit(&atexit_list,fn); } -static int mi__crt_at_quick_exit(cbfun_t* fn) { +static int mi_at_quick_exit(cbfun_t* fn) { return mi_register_atexit(&at_quick_exit_list,fn); } +static int mi_register_onexit(void* table, cbfun_t* fn) { + // TODO: how can we distinguish a quick_exit from atexit? + return mi_atexit(fn); +} // Execute exit functions in a list static void mi_execute_exit_list(exit_list_t* list) { @@ -393,9 +397,12 @@ typedef struct mi_patch_s { static mi_patch_t patches[] = { // we implement our own global exit handler (as the CRT versions do a realloc internally) - MI_PATCH2(_crt_atexit, mi__crt_atexit), - MI_PATCH2(_crt_at_quick_exit, mi__crt_at_quick_exit), + //MI_PATCH2(_crt_atexit, mi_atexit), + //MI_PATCH2(_crt_at_quick_exit, mi_at_quick_exit), MI_PATCH2(_setmaxstdio, mi_setmaxstdio), + MI_PATCH2(_register_onexit_function, mi_register_onexit), + MI_PATCH2(atexit, mi_atexit), + MI_PATCH2(at_quick_exit, mi_at_quick_exit), // base versions MI_PATCH2(_malloc_base, mi_malloc),