From 8147ccea455c72d2a9cecbdca953f392fee65b97 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 2 Aug 2008 02:51:44 +0000 Subject: [PATCH] * rubysig.h (CHECK_INTS): gives the chance to perform to deferred finalizers before explicit GC.start or the process termination. [ruby-core:18045] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@18316 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ rubysig.h | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 564b8b326c..a09b5d735b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Aug 2 11:51:42 2008 Nobuyoshi Nakada + + * rubysig.h (CHECK_INTS): gives the chance to perform to deferred + finalizers before explicit GC.start or the process termination. + [ruby-core:18045] + Fri Aug 1 14:54:42 2008 Nobuyoshi Nakada * win32/win32.c (rb_w32_seekdir): no need to rewind to seek forward. diff --git a/rubysig.h b/rubysig.h index f716824877..5dc7b3fcab 100644 --- a/rubysig.h +++ b/rubysig.h @@ -79,11 +79,13 @@ void rb_trap_restore_mask _((void)); RUBY_EXTERN int rb_thread_critical; void rb_thread_schedule _((void)); +void rb_gc_finalize_deferred _((void)); #if defined(HAVE_SETITIMER) || defined(_THREAD_SAFE) RUBY_EXTERN int rb_thread_pending; # define CHECK_INTS do {\ if (!(rb_prohibit_interrupt || rb_thread_critical)) {\ - if (rb_thread_pending) rb_thread_schedule();\ + rb_gc_finalize_deferred();\ + if (rb_thread_pending) rb_thread_schedule();\ if (rb_trap_pending) rb_trap_exec();\ }\ } while (0) @@ -93,9 +95,10 @@ RUBY_EXTERN int rb_thread_tick; #define THREAD_TICK 500 #define CHECK_INTS do {\ if (!(rb_prohibit_interrupt || rb_thread_critical)) {\ + rb_gc_finalize_deferred();\ if (rb_thread_tick-- <= 0) {\ rb_thread_tick = THREAD_TICK;\ - rb_thread_schedule();\ + rb_thread_schedule();\ }\ }\ if (rb_trap_pending) rb_trap_exec();\