diff --git a/src/init.c b/src/init.c index 953609f8..c416208c 100644 --- a/src/init.c +++ b/src/init.c @@ -379,7 +379,11 @@ static void _mi_thread_done(mi_heap_t* default_heap); #endif static DWORD mi_fls_key = (DWORD)(-1); static void NTAPI mi_fls_done(PVOID value) { - if (value!=NULL) _mi_thread_done((mi_heap_t*)value); + mi_heap_t* heap = (mi_heap_t*)value; + if (heap != NULL) { + _mi_thread_done(heap); + FlsSetValue(mi_fls_key, NULL); // prevent recursion as _mi_thread_done may set it back to the main heap, issue #672 + } } #elif defined(MI_USE_PTHREADS) // use pthread local storage keys to detect thread ending diff --git a/test/main-override-static.c b/test/main-override-static.c index 0701a08b..534c8849 100644 --- a/test/main-override-static.c +++ b/test/main-override-static.c @@ -45,6 +45,9 @@ int main() { char* s = strdup("hello\n"); free(p2); + mi_heap_t* h = mi_heap_new(); + mi_heap_set_default(h); + p2 = malloc(16); p1 = realloc(p1, 32); free(p1); @@ -61,6 +64,7 @@ int main() { //mi_stats_print(NULL); // test_process_info(); + return 0; }