ruby-changes:6803
From: nobu <ko1@a...>
Date: Sat, 2 Aug 2008 16:08:38 +0900 (JST)
Subject: [ruby-changes:6803] Ruby:r18319 (ruby_1_8): * eval.c (rb_thread_schedule): runs deferred finalizers.
nobu 2008-08-02 16:08:18 +0900 (Sat, 02 Aug 2008) New Revision: 18319 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18319 Log: * eval.c (rb_thread_schedule): runs deferred finalizers. * gc.c (gc_sweep): sets rb_thread_pending to run deferred finalizers. * rubysig.h (CHECK_INTS): now checks rb_thread_pending even on platforms where setitimer is not available. [ruby-core:18045] Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/eval.c branches/ruby_1_8/gc.c branches/ruby_1_8/rubysig.h Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 18318) +++ ruby_1_8/ChangeLog (revision 18319) @@ -1,3 +1,12 @@ +Sat Aug 2 16:08:07 2008 Nobuyoshi Nakada <nobu@r...> + + * eval.c (rb_thread_schedule): runs deferred finalizers. + + * gc.c (gc_sweep): sets rb_thread_pending to run deferred finalizers. + + * rubysig.h (CHECK_INTS): now checks rb_thread_pending even on + platforms where setitimer is not available. [ruby-core:18045] + Sat Aug 2 15:51:50 2008 Nobuyoshi Nakada <nobu@r...> * parse.y (yylex): 8 and 9 in octal integer should cause compile @@ -3,10 +12,4 @@ error. [ruby-dev:35729] -Sat Aug 2 11:51:42 2008 Nobuyoshi Nakada <nobu@r...> - - * 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 <nobu@r...> Index: ruby_1_8/eval.c =================================================================== --- ruby_1_8/eval.c (revision 18318) +++ ruby_1_8/eval.c (revision 18319) @@ -10948,6 +10948,7 @@ } #endif rb_thread_pending = 0; + rb_gc_finalize_deferred(); if (curr_thread == curr_thread->next && curr_thread->status == THREAD_RUNNABLE) return; Index: ruby_1_8/gc.c =================================================================== --- ruby_1_8/gc.c (revision 18318) +++ ruby_1_8/gc.c (revision 18319) @@ -1197,6 +1197,7 @@ /* clear finalization list */ if (final_list) { deferred_final_list = final_list; + rb_thread_pending = 1; return; } free_unused_heaps(); Index: ruby_1_8/rubysig.h =================================================================== --- ruby_1_8/rubysig.h (revision 18318) +++ ruby_1_8/rubysig.h (revision 18319) @@ -78,13 +78,11 @@ void rb_trap_restore_mask _((void)); RUBY_EXTERN int rb_thread_critical; +RUBY_EXTERN int rb_thread_pending; 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)) {\ - rb_gc_finalize_deferred();\ if (rb_thread_pending) rb_thread_schedule();\ if (rb_trap_pending) rb_trap_exec();\ }\ @@ -95,8 +93,7 @@ #define THREAD_TICK 500 #define CHECK_INTS do {\ if (!(rb_prohibit_interrupt || rb_thread_critical)) {\ - rb_gc_finalize_deferred();\ - if (rb_thread_tick-- <= 0) {\ + if (rb_thread_pending || rb_thread_tick-- <= 0) {\ rb_thread_tick = THREAD_TICK;\ rb_thread_schedule();\ }\ -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/