~ chicken-core (chicken-5) 323994049d6f7713faa414c7315ec24d3240d1f7
commit 323994049d6f7713faa414c7315ec24d3240d1f7 Author: felix.winkelmann@bevuta.com <felix.winkelmann@bevuta.com> AuthorDate: Thu Apr 30 17:08:35 2020 +0200 Commit: Kooda <kooda@upyum.com> CommitDate: Tue Jul 28 13:19:33 2020 +0200 Only force finalizers at program cleanup when live finalizer count is non-zero Signed-off-by: Kooda <kooda@upyum.com> diff --git a/NEWS b/NEWS index e5372080..7164df42 100644 --- a/NEWS +++ b/NEWS @@ -31,6 +31,8 @@ deprecation of current-milliseconds. - Officially deprecated C_pair() in favor of C_a_pair(); it has been deprecated for years. + - At program cleanup, finalizers are only forced when the live + finalizer count is non-zero - Build system - Auto-configure at build time on most platforms. Cross-compilation diff --git a/library.scm b/library.scm index 1a7e48f2..c5015b7a 100644 --- a/library.scm +++ b/library.scm @@ -5008,10 +5008,13 @@ EOF (unless (null? tasks) (for-each (lambda (t) (t)) tasks) (loop)))) - (when (##sys#debug-mode?) - (##sys#print "[debug] forcing finalizers...\n" #f ##sys#standard-error)) - (when (chicken.gc#force-finalizers) - (##sys#force-finalizers))) + (when (fx> (##sys#slot ##sys#pending-finalizers 0) 0) + (##sys#run-pending-finalizers #f)) + (when (fx> (##core#inline "C_i_live_finalizer_count") 0) + (when (##sys#debug-mode?) + (##sys#print "[debug] forcing finalizers...\n" #f ##sys#standard-error)) + (when (chicken.gc#force-finalizers) + (##sys#force-finalizers)))) (set! chicken.base#exit-handler (make-parameterTrap