From e0871911cab3250d2f50e267eb9028db72f8086d Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Wed, 8 Feb 2023 08:21:45 +0300 Subject: Generalize finalizers interruption API (fix of commit e71a7d653) * finalize.c (GC_interrupt_finalizers): Move definition upper (to be before GC_enqueue_all_finalizers); change type from GC_bool to unsigned; update comment. * finalize.c [!JAVA_FINALIZATION_NOT_NEEDED] (GC_finalize_all): Set GC_interrupt_finalizers to 0 after GC_enqueue_all_finalizers() call. * finalize.c (GC_set_interrupt_finalizers): Add unsigned argument; set GC_interrupt_finalizers to the argument value. * finalize.c (GC_set_interrupt_finalizers, GC_invoke_finalizers): Wrap access to GC_interrupt_finalizers into LOCK/UNLOCK. * finalize.c (GC_get_interrupt_finalizers): New public function definition. * finalize.c (GC_invoke_finalizers): Do not break the loop (because of non-zero GC_interrupt_finalizers) on the first iteration or if iteration number is smaller than GC_interrupt_finalizers value. * finalize.c (GC_notify_or_invoke_finalizers): Update comment for the reset of *pnested. * finalize.c [!THREADS] (GC_notify_or_invoke_finalizers): Allow finalize_now to be non-null in the assertion in case of a non-zero value of GC_interrupt_finalizers. * include/gc/gc.h (GC_set_interrupt_finalizers): Update comment; add unsigned argument. * include/gc/gc.h (GC_get_interrupt_finalizers): New public function declaration. * tests/gctest.c [GC_PTHREADS && !GC_NO_FINALIZATION] (main): Call GC_set_interrupt_finalizers() and GC_get_interrupt_finalizers(). --- tests/gctest.c | 1 + 1 file changed, 1 insertion(+) (limited to 'tests') diff --git a/tests/gctest.c b/tests/gctest.c index b2bbb96a..709d65cd 100644 --- a/tests/gctest.c +++ b/tests/gctest.c @@ -2606,6 +2606,7 @@ int main(void) # endif # ifndef GC_NO_FINALIZATION GC_set_await_finalize_proc(GC_get_await_finalize_proc()); + GC_set_interrupt_finalizers(GC_get_interrupt_finalizers()); # ifndef GC_TOGGLE_REFS_NOT_NEEDED GC_set_toggleref_func(GC_get_toggleref_func()); # endif -- cgit v1.2.1