mirror of
https://github.com/microsoft/mimalloc.git
synced 2024-12-28 22:05:40 +08:00
collect memory on process exit for statically linked library (issue #281
This commit is contained in:
parent
47572aceca
commit
9e7322f900
@ -128,7 +128,6 @@ static void mi_heap_collect_ex(mi_heap_t* heap, mi_collect_t collect)
|
|||||||
_mi_abandoned_reclaim_all(heap, &heap->tld->segments);
|
_mi_abandoned_reclaim_all(heap, &heap->tld->segments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// if abandoning, mark all pages to no longer add to delayed_free
|
// if abandoning, mark all pages to no longer add to delayed_free
|
||||||
if (collect == MI_ABANDON) {
|
if (collect == MI_ABANDON) {
|
||||||
mi_heap_visit_pages(heap, &mi_heap_page_never_delayed_free, NULL, NULL);
|
mi_heap_visit_pages(heap, &mi_heap_page_never_delayed_free, NULL, NULL);
|
||||||
@ -150,12 +149,10 @@ static void mi_heap_collect_ex(mi_heap_t* heap, mi_collect_t collect)
|
|||||||
_mi_segment_thread_collect(&heap->tld->segments);
|
_mi_segment_thread_collect(&heap->tld->segments);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
// collect regions on program-exit (or shared library unload)
|
||||||
// collect regions
|
|
||||||
if (collect >= MI_FORCE && _mi_is_main_thread() && mi_heap_is_backing(heap)) {
|
if (collect >= MI_FORCE && _mi_is_main_thread() && mi_heap_is_backing(heap)) {
|
||||||
_mi_mem_collect(&heap->tld->os);
|
_mi_mem_collect(&heap->tld->os);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _mi_heap_collect_abandon(mi_heap_t* heap) {
|
void _mi_heap_collect_abandon(mi_heap_t* heap) {
|
||||||
|
12
src/init.c
12
src/init.c
@ -503,11 +503,15 @@ static void mi_process_done(void) {
|
|||||||
FlsSetValue(mi_fls_key, NULL); // don't call main-thread callback
|
FlsSetValue(mi_fls_key, NULL); // don't call main-thread callback
|
||||||
FlsFree(mi_fls_key); // call thread-done on all threads to prevent dangling callback pointer if statically linked with a DLL; Issue #208
|
FlsFree(mi_fls_key); // call thread-done on all threads to prevent dangling callback pointer if statically linked with a DLL; Issue #208
|
||||||
#endif
|
#endif
|
||||||
#ifndef NDEBUG
|
|
||||||
mi_collect(true);
|
#if (MI_DEBUG != 0) || !defined(MI_SHARED_LIB)
|
||||||
|
// free all memory if possible on process exit. This is not needed for a stand-alone process
|
||||||
|
// but should be done if mimalloc is statically linked into another shared library which
|
||||||
|
// is repeatedly loaded/unloaded, see issue #281.
|
||||||
|
mi_collect(true /* force */ );
|
||||||
#endif
|
#endif
|
||||||
if (mi_option_is_enabled(mi_option_show_stats) ||
|
|
||||||
mi_option_is_enabled(mi_option_verbose)) {
|
if (mi_option_is_enabled(mi_option_show_stats) || mi_option_is_enabled(mi_option_verbose)) {
|
||||||
mi_stats_print(NULL);
|
mi_stats_print(NULL);
|
||||||
}
|
}
|
||||||
mi_allocator_done();
|
mi_allocator_done();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user