summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-06 12:02:57 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-06 12:02:57 +0000
commit38943e80d6f5704853ea25aaebacc838da20ef76 (patch)
tree382399d0dad393fd0f50949ce73669daadc19f6a /gc.c
parentad92b09e824f8fef81bf9877860981ab8db5141a (diff)
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/gc.c b/gc.c
index 13df413ec9..cb14033717 100644
--- a/gc.c
+++ b/gc.c
@@ -2330,22 +2330,34 @@ is_swept_object(rb_objspace_t *objspace, VALUE ptr)
}
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_dead_object(objspace, ptr)) return FALSE;
- return TRUE;
+
+ if (is_dying_object(objspace, ptr)) {
+ return FALSE;
+ }
+ else {
+ return TRUE;
+ }
}
static inline int
@@ -2369,6 +2381,13 @@ rb_objspace_markable_object_p(VALUE obj)
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