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

ruby-changes:34633

From: ko1 <ko1@a...>
Date: Sun, 6 Jul 2014 21:10:27 +0900 (JST)
Subject: [ruby-changes:34633] ko1:r46716 (trunk): * gc.c: rename is_dead_object() to is_dying_object().

ko1	2014-07-06 21:02:57 +0900 (Sun, 06 Jul 2014)

  New Revision: 46716

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

  Log:
    * gc.c: rename is_dead_object() to is_dying_object().
      This function is not opposite against is_live_object()
      because is_dying_object() does *not* check object type.
    * gc.c (is_dying_object): change condition.
    * gc.c (is_live_object): use T_NONE instead of 0.
    * gc.c (rb_objspace_dying_object_p): added.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 46715)
+++ ChangeLog	(revision 46716)
@@ -1,3 +1,15 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sun Jul  6 21:00:11 2014  Koichi Sasada  <ko1@a...>
+
+	* gc.c: rename is_dead_object() to is_dying_object().
+	  This function is not opposite against is_live_object()
+	  because is_dying_object() does *not* check object type.
+
+	* gc.c (is_dying_object): change condition.
+
+	* gc.c (is_live_object): use T_NONE instead of 0.
+
+	* gc.c (rb_objspace_dying_object_p): added.
+
 Sun Jul  6 13:37:27 2014  Koichi Sasada  <ko1@a...>
 
 	* gc.c (rb_gc_register_mark_object): change data structure.
Index: gc.c
===================================================================
--- gc.c	(revision 46715)
+++ gc.c	(revision 46716)
@@ -2330,22 +2330,34 @@ is_swept_object(rb_objspace_t *objspace, https://github.com/ruby/ruby/blob/trunk/gc.c#L2330
 }
 
 static inline int
-is_dead_object(rb_objspace_t *objspace, VALUE ptr)
+is_dying_object(rb_objspace_t *objspace, VALUE ptr)
 {
-    if (!is_lazy_sweeping(heap_eden) || MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(ptr), ptr)) return FALSE;
-    if (!is_swept_object(objspace, ptr)) return TRUE;
-    return FALSE;
+    if (!is_lazy_sweeping(heap_eden) ||
+	!is_swept_object(objspace, ptr) ||
+	MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(ptr), ptr)) {
+
+	return FALSE;
+    }
+    else {
+	return TRUE;
+    }
 }
 
 static inline int
 is_live_object(rb_objspace_t *objspace, VALUE ptr)
 {
     switch (BUILTIN_TYPE(ptr)) {
-      case 0: case T_ZOMBIE:
+      case T_NONE:
+      case T_ZOMBIE:
+	return FALSE;
+    }
+
+    if (is_dying_object(objspace, ptr)) {
 	return FALSE;
     }
-    if (is_dead_object(objspace, ptr)) return FALSE;
-    return TRUE;
+    else {
+	return TRUE;
+    }
 }
 
 static inline int
@@ -2369,6 +2381,13 @@ rb_objspace_markable_object_p(VALUE obj) https://github.com/ruby/ruby/blob/trunk/gc.c#L2381
     return is_markable_object(objspace, obj) && is_live_object(objspace, obj);
 }
 
+int
+rb_objspace_dying_object_p(VALUE obj)
+{
+    rb_objspace_t *objspace = &rb_objspace;
+    return is_dying_object(objspace, obj);
+}
+
 /*
  *  call-seq:
  *     ObjectSpace._id2ref(object_id) -> an_object

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

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