[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]