need the lock for debug checking.
Checking code (RGENGC_CHECK_MODE > 0) need a VM lock because it refers objspace.
This commit is contained in:
parent
47ff8de645
commit
45b29754cf
9
gc.c
9
gc.c
@ -2084,6 +2084,11 @@ newobj_init(VALUE klass, VALUE flags, int wb_protected, rb_objspace_t *objspace,
|
||||
|
||||
#if RGENGC_CHECK_MODE
|
||||
p->as.values.v1 = p->as.values.v2 = p->as.values.v3 = 0;
|
||||
|
||||
RB_VM_LOCK_ENTER_NO_BARRIER();
|
||||
{
|
||||
check_rvalue_consistency(obj);
|
||||
|
||||
GC_ASSERT(RVALUE_MARKED(obj) == FALSE);
|
||||
GC_ASSERT(RVALUE_MARKING(obj) == FALSE);
|
||||
GC_ASSERT(RVALUE_OLD_P(obj) == FALSE);
|
||||
@ -2096,6 +2101,8 @@ newobj_init(VALUE klass, VALUE flags, int wb_protected, rb_objspace_t *objspace,
|
||||
if (RVALUE_AGE(obj) > 0) rb_bug("newobj: %s of age (%d) > 0.", obj_info(obj), RVALUE_AGE(obj));
|
||||
}
|
||||
if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj));
|
||||
}
|
||||
RB_VM_LOCK_LEAVE_NO_BARRIER();
|
||||
#endif
|
||||
|
||||
if (UNLIKELY(wb_protected == FALSE)) {
|
||||
@ -2146,8 +2153,6 @@ newobj_init(VALUE klass, VALUE flags, int wb_protected, rb_objspace_t *objspace,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
check_rvalue_consistency(obj);
|
||||
|
||||
// RUBY_DEBUG_LOG("obj:%p (%s)", (void *)obj, obj_type_name(obj));
|
||||
return obj;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user