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

ruby-changes:8128

From: nobu <ko1@a...>
Date: Wed, 1 Oct 2008 21:36:55 +0900 (JST)
Subject: [ruby-changes:8128] Ruby:r19656 (trunk): * gc.c (rb_gc_call_finalizer_at_exit): finalize deferred IO and Data.

nobu	2008-10-01 21:36:38 +0900 (Wed, 01 Oct 2008)

  New Revision: 19656

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19656

  Log:
    * gc.c (rb_gc_call_finalizer_at_exit): finalize deferred IO and Data.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19655)
+++ ChangeLog	(revision 19656)
@@ -1,5 +1,7 @@
-Wed Oct  1 19:13:55 2008  Nobuyoshi Nakada  <nobu@r...>
+Wed Oct  1 21:36:35 2008  Nobuyoshi Nakada  <nobu@r...>
 
+	* gc.c (rb_gc_call_finalizer_at_exit): finalize deferred IO and Data.
+
 	* gc.c (rb_gc_call_finalizer_at_exit): deffers IO finalization.
 	  [ruby-dev:36646]
 
Index: gc.c
===================================================================
--- gc.c	(revision 19655)
+++ gc.c	(revision 19656)
@@ -2357,13 +2357,13 @@
 {
     rb_objspace_t *objspace = &rb_objspace;
     RVALUE *p, *pend;
+    RVALUE *final_list = 0;
     size_t i;
 
     /* run finalizers */
     if (finalizer_table) {
 	finalize_deferred(objspace);
 	while (finalizer_table->num_entries > 0) {
-	    RVALUE *final_list = 0;
 	    st_foreach(finalizer_table, chain_finalized_object,
 		       (st_data_t)&final_list);
 	    if (!(p = final_list)) break;
@@ -2390,18 +2390,24 @@
 		}
 		else if (RANY(p)->as.data.dfree) {
 		    make_deferred(RANY(p));
+		    RANY(p)->as.free.next = final_list;
+		    final_list = p;
 		}
 	    }
 	    else if (BUILTIN_TYPE(p) == T_FILE) {
 		if (RANY(p)->as.file.fptr) {
 		    make_io_deferred(RANY(p));
+		    RANY(p)->as.free.next = final_list;
+		    final_list = p;
 		}
 	    }
 	    p++;
 	}
     }
     during_gc = 0;
-    finalize_deferred(objspace);
+    if (final_list) {
+	finalize_list(objspace, final_list);
+    }
 }
 
 void

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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