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

ruby-changes:21170

From: nobu <ko1@a...>
Date: Thu, 8 Sep 2011 07:37:03 +0900 (JST)
Subject: [ruby-changes:21170] nobu:r33219 (trunk): * gc.c (id2ref): unmarked object is already dead while lazy

nobu	2011-09-08 07:33:14 +0900 (Thu, 08 Sep 2011)

  New Revision: 33219

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

  Log:
    * gc.c (id2ref): unmarked object is already dead while lazy
      sweeping, and to it cannot come back since other objects
      referred from it might have been freed already.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33218)
+++ ChangeLog	(revision 33219)
@@ -1,3 +1,9 @@
+Thu Sep  8 07:33:12 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* gc.c (id2ref): unmarked object is already dead while lazy
+	  sweeping, and to it cannot come back since other objects
+	  referred from it might have been freed already.
+
 Wed Sep  8 03:48:00 2011  Ayumu AIZAWA  <ayumu.aizawa@g...>
 
 	* ext/readline/README.ja:
Index: gc.c
===================================================================
--- gc.c	(revision 33218)
+++ gc.c	(revision 33219)
@@ -390,6 +390,8 @@
 #define global_List		objspace->global_list
 #define ruby_gc_stress		objspace->gc_stress
 
+#define is_lazy_sweeping(objspace) ((objspace)->heap.sweep_slots != 0)
+
 static void rb_objspace_call_finalizer(rb_objspace_t *objspace);
 
 #if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
@@ -3130,7 +3132,8 @@
 	BUILTIN_TYPE(ptr) > T_FIXNUM || BUILTIN_TYPE(ptr) == T_ICLASS) {
 	rb_raise(rb_eRangeError, "%p is not id value", p0);
     }
-    if (BUILTIN_TYPE(ptr) == 0 || RBASIC(ptr)->klass == 0) {
+    if (BUILTIN_TYPE(ptr) == 0 || RBASIC(ptr)->klass == 0 ||
+	(is_lazy_sweeping(objspace) && !(RBASIC(ptr)->flags & FL_MARK))) {
 	rb_raise(rb_eRangeError, "%p is recycled object", p0);
     }
     return (VALUE)ptr;

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

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