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

ruby-changes:16118

From: mame <ko1@a...>
Date: Sun, 30 May 2010 00:10:14 +0900 (JST)
Subject: [ruby-changes:16118] Ruby:r28073 (trunk): * gc.c (force_chain_object, rb_objspace_call_finalizer): delete

mame	2010-05-30 00:10:01 +0900 (Sun, 30 May 2010)

  New Revision: 28073

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

  Log:
    * gc.c (force_chain_object, rb_objspace_call_finalizer): delete
      finalizer entry after corresponding finalizer is executed.
      This caused SEGV when test/cgi is executed with GC.stress = true.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28072)
+++ ChangeLog	(revision 28073)
@@ -1,3 +1,9 @@
+Sun May 30 00:02:39 2010  Yusuke Endoh  <mame@t...>
+
+	* gc.c (force_chain_object, rb_objspace_call_finalizer): delete
+	  finalizer entry after corresponding finalizer is executed.
+	  This caused SEGV when test/cgi is executed with GC.stress = true.
+
 Sat May 29 23:30:33 2010  Yusuke Endoh  <mame@t...>
 
 	* string.c (str_replace_shared): change embedded state atomically.
Index: gc.c
===================================================================
--- gc.c	(revision 28072)
+++ gc.c	(revision 28073)
@@ -2840,7 +2840,7 @@
     curr->table = val;
     curr->next = *prev;
     *prev = curr;
-    return ST_DELETE;
+    return ST_CONTINUE;
 }
 
 void
@@ -2873,6 +2873,7 @@
 	    while (list) {
 		struct force_finalize_list *curr = list;
 		run_finalizer(objspace, curr->obj, rb_obj_id(curr->obj), curr->table);
+		st_delete(finalizer_table, (st_data_t*)&curr->obj, 0);
 		list = curr->next;
 		xfree(curr);
 	    }

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

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