* gc.c (gc_mark_ptr): rename to gc_mark_set.
* gc.c (gc_mark): add gc_mark_ptr() to skip is_markable_object() check. gc_mark_maybe() can use gc_mark_ptr() directly because passed pointer is checked by is_pointer_to_heap(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47532 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
dcd1c22701
commit
51101947bb
@ -1,3 +1,11 @@
|
|||||||
|
Thu Sep 11 19:16:39 2014 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
|
* gc.c (gc_mark_ptr): rename to gc_mark_set.
|
||||||
|
|
||||||
|
* gc.c (gc_mark): add gc_mark_ptr() to skip is_markable_object()
|
||||||
|
check. gc_mark_maybe() can use gc_mark_ptr() directly because
|
||||||
|
passed pointer is checked by is_pointer_to_heap().
|
||||||
|
|
||||||
Thu Sep 11 18:40:16 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
|
Thu Sep 11 18:40:16 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
|
||||||
|
|
||||||
* .gitignore: ignored temporary files and coverage results.
|
* .gitignore: ignored temporary files and coverage results.
|
||||||
|
24
gc.c
24
gc.c
@ -769,6 +769,7 @@ static void gc_sweep_rest(rb_objspace_t *objspace);
|
|||||||
static void gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *heap);
|
static void gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *heap);
|
||||||
|
|
||||||
static void gc_mark(rb_objspace_t *objspace, VALUE ptr);
|
static void gc_mark(rb_objspace_t *objspace, VALUE ptr);
|
||||||
|
static void gc_mark_ptr(rb_objspace_t *objspace, VALUE ptr);
|
||||||
static void gc_mark_maybe(rb_objspace_t *objspace, VALUE ptr);
|
static void gc_mark_maybe(rb_objspace_t *objspace, VALUE ptr);
|
||||||
static void gc_mark_children(rb_objspace_t *objspace, VALUE ptr);
|
static void gc_mark_children(rb_objspace_t *objspace, VALUE ptr);
|
||||||
|
|
||||||
@ -3855,7 +3856,7 @@ gc_mark_maybe(rb_objspace_t *objspace, VALUE obj)
|
|||||||
if (is_pointer_to_heap(objspace, (void *)obj)) {
|
if (is_pointer_to_heap(objspace, (void *)obj)) {
|
||||||
int type = BUILTIN_TYPE(obj);
|
int type = BUILTIN_TYPE(obj);
|
||||||
if (type != T_ZOMBIE && type != T_NONE) {
|
if (type != T_ZOMBIE && type != T_NONE) {
|
||||||
gc_mark(objspace, obj);
|
gc_mark_ptr(objspace, obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3867,7 +3868,7 @@ rb_gc_mark_maybe(VALUE obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
gc_mark_ptr(rb_objspace_t *objspace, VALUE obj)
|
gc_mark_set(rb_objspace_t *objspace, VALUE obj)
|
||||||
{
|
{
|
||||||
if (RVALUE_MARKED(obj)) return 0;
|
if (RVALUE_MARKED(obj)) return 0;
|
||||||
MARK_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj);
|
MARK_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj);
|
||||||
@ -3986,13 +3987,11 @@ gc_aging(rb_objspace_t *objspace, VALUE obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gc_mark(rb_objspace_t *objspace, VALUE obj)
|
gc_mark_ptr(rb_objspace_t *objspace, VALUE obj)
|
||||||
{
|
{
|
||||||
if (!is_markable_object(objspace, obj)) return;
|
|
||||||
|
|
||||||
if (LIKELY(objspace->mark_func_data == NULL)) {
|
if (LIKELY(objspace->mark_func_data == NULL)) {
|
||||||
rgengc_check_relation(objspace, obj);
|
rgengc_check_relation(objspace, obj);
|
||||||
if (!gc_mark_ptr(objspace, obj)) return; /* already marked */
|
if (!gc_mark_set(objspace, obj)) return; /* already marked */
|
||||||
gc_aging(objspace, obj);
|
gc_aging(objspace, obj);
|
||||||
gc_grey(objspace, obj);
|
gc_grey(objspace, obj);
|
||||||
}
|
}
|
||||||
@ -4001,6 +4000,13 @@ gc_mark(rb_objspace_t *objspace, VALUE obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gc_mark(rb_objspace_t *objspace, VALUE obj)
|
||||||
|
{
|
||||||
|
if (!is_markable_object(objspace, obj)) return;
|
||||||
|
gc_mark_ptr(objspace, obj);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_gc_mark(VALUE ptr)
|
rb_gc_mark(VALUE ptr)
|
||||||
{
|
{
|
||||||
@ -4299,7 +4305,7 @@ gc_mark_roots(rb_objspace_t *objspace, const char **categoryp)
|
|||||||
MARK_CHECKPOINT("vm");
|
MARK_CHECKPOINT("vm");
|
||||||
SET_STACK_END;
|
SET_STACK_END;
|
||||||
rb_vm_mark(th->vm);
|
rb_vm_mark(th->vm);
|
||||||
if (th->vm->self) gc_mark_ptr(objspace, th->vm->self);
|
if (th->vm->self) gc_mark_set(objspace, th->vm->self);
|
||||||
|
|
||||||
MARK_CHECKPOINT("finalizers");
|
MARK_CHECKPOINT("finalizers");
|
||||||
mark_tbl(objspace, finalizer_table);
|
mark_tbl(objspace, finalizer_table);
|
||||||
@ -5329,7 +5335,7 @@ gc_mark_from(rb_objspace_t *objspace, VALUE obj, VALUE parent)
|
|||||||
{
|
{
|
||||||
gc_mark_set_parent(objspace, parent);
|
gc_mark_set_parent(objspace, parent);
|
||||||
rgengc_check_relation(objspace, obj);
|
rgengc_check_relation(objspace, obj);
|
||||||
if (gc_mark_ptr(objspace, obj) == FALSE) return;
|
if (gc_mark_set(objspace, obj) == FALSE) return;
|
||||||
gc_aging(objspace, obj);
|
gc_aging(objspace, obj);
|
||||||
gc_grey(objspace, obj);
|
gc_grey(objspace, obj);
|
||||||
}
|
}
|
||||||
@ -5393,7 +5399,7 @@ rb_gc_writebarrier_unprotect(VALUE obj)
|
|||||||
if (RVALUE_OLD_P(obj)) {
|
if (RVALUE_OLD_P(obj)) {
|
||||||
gc_report(1, objspace, "rb_gc_writebarrier_unprotect: %s\n", obj_info(obj));
|
gc_report(1, objspace, "rb_gc_writebarrier_unprotect: %s\n", obj_info(obj));
|
||||||
RVALUE_DEMOTE(objspace, obj);
|
RVALUE_DEMOTE(objspace, obj);
|
||||||
gc_mark_ptr(objspace, obj);
|
gc_mark_set(objspace, obj);
|
||||||
gc_remember_unprotected(objspace, obj);
|
gc_remember_unprotected(objspace, obj);
|
||||||
|
|
||||||
#if RGENGC_PROFILE
|
#if RGENGC_PROFILE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user