From: Ivan Maidanski Date: Wed, 25 Sep 2019 08:28:41 +0000 (+0300) Subject: Set GC_collecting hint for GC_collect_a_little_inner calls (pthreads) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ddd788fc3c3701405efde47c3f540bdf01c878dd;p=gc Set GC_collecting hint for GC_collect_a_little_inner calls (pthreads) * alloc.c (GC_try_to_collect_inner, GC_collect_a_little): Wrap GC_collect_a_little_inner() call into ENTER/EXIT_GC(). * gc_dlopen.c [!USE_PROC_FOR_LIBRARIES] (disable_gc_for_dlopen): Likewise. * malloc.c (GC_alloc_large): Likewise. --- diff --git a/alloc.c b/alloc.c index 5e3816e9..75e71cfb 100644 --- a/alloc.c +++ b/alloc.c @@ -534,7 +534,9 @@ GC_INNER GC_bool GC_try_to_collect_inner(GC_stop_func stop_func) /* TODO: Notify GC_EVENT_ABANDON */ return(FALSE); } + ENTER_GC(); GC_collect_a_little_inner(1); + EXIT_GC(); } } GC_notify_full_gc(); @@ -719,7 +721,9 @@ GC_API int GC_CALL GC_collect_a_little(void) DCL_LOCK_STATE; LOCK(); + ENTER_GC(); GC_collect_a_little_inner(1); + EXIT_GC(); result = (int)GC_collection_in_progress(); UNLOCK(); if (!result && GC_debugging_started) GC_print_all_smashed(); diff --git a/gc_dlopen.c b/gc_dlopen.c index 0da82278..13991bae 100644 --- a/gc_dlopen.c +++ b/gc_dlopen.c @@ -46,7 +46,9 @@ DCL_LOCK_STATE; LOCK(); while (GC_incremental && GC_collection_in_progress()) { + ENTER_GC(); GC_collect_a_little_inner(1000); + EXIT_GC(); } ++GC_dont_gc; UNLOCK(); diff --git a/malloc.c b/malloc.c index 7e35ee8b..c2e87952 100644 --- a/malloc.c +++ b/malloc.c @@ -52,8 +52,11 @@ GC_INNER ptr_t GC_alloc_large(size_t lb, int k, unsigned flags) LOCK(); } /* Do our share of marking work */ - if (GC_incremental && !GC_dont_gc) + if (GC_incremental && !GC_dont_gc) { + ENTER_GC(); GC_collect_a_little_inner((int)n_blocks); + EXIT_GC(); + } h = GC_allochblk(lb, k, flags); # ifdef USE_MUNMAP if (0 == h) {