Remove wrapper functions of RVALUE_REMEMBERED
Functions rgengc_remembered, rgengc_remembered_sweep, and rgengc_remembersetbits_get are just wrappers of RVALUE_REMEMBERED and doesn't do much more. We can remove all those and use RVALUE_REMEMBERED directly instead.
This commit is contained in:
parent
397a77557c
commit
74b9c7d207
Notes:
git
2023-08-08 13:44:33 +00:00
36
gc.c
36
gc.c
@ -1492,9 +1492,6 @@ asan_poison_object_restore(VALUE obj, void *ptr)
|
||||
#define RVALUE_PAGE_UNCOLLECTIBLE(page, obj) MARKED_IN_BITMAP((page)->uncollectible_bits, (obj))
|
||||
#define RVALUE_PAGE_MARKING(page, obj) MARKED_IN_BITMAP((page)->marking_bits, (obj))
|
||||
|
||||
|
||||
static int rgengc_remembered(rb_objspace_t *objspace, VALUE obj);
|
||||
static int rgengc_remembered_sweep(rb_objspace_t *objspace, VALUE obj);
|
||||
static int rgengc_remember(rb_objspace_t *objspace, VALUE obj);
|
||||
static void rgengc_mark_and_rememberset_clear(rb_objspace_t *objspace, rb_heap_t *heap);
|
||||
static void rgengc_rememberset_mark(rb_objspace_t *objspace, rb_heap_t *heap);
|
||||
@ -2507,7 +2504,7 @@ newobj_init(VALUE klass, VALUE flags, int wb_protected, rb_objspace_t *objspace,
|
||||
GC_ASSERT(RVALUE_OLD_P(obj) == FALSE);
|
||||
GC_ASSERT(RVALUE_WB_UNPROTECTED(obj) == FALSE);
|
||||
|
||||
if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj));
|
||||
if (RVALUE_REMEMBERED((VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj));
|
||||
}
|
||||
RB_VM_LOCK_LEAVE_NO_BARRIER();
|
||||
#endif
|
||||
@ -5435,7 +5432,7 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
|
||||
#if RGENGC_CHECK_MODE
|
||||
if (!is_full_marking(objspace)) {
|
||||
if (RVALUE_OLD_P(vp)) rb_bug("page_sweep: %p - old while minor GC.", (void *)p);
|
||||
if (rgengc_remembered_sweep(objspace, vp)) rb_bug("page_sweep: %p - remembered.", (void *)p);
|
||||
if (RVALUE_REMEMBERED(vp)) rb_bug("page_sweep: %p - remembered.", (void *)p);
|
||||
}
|
||||
#endif
|
||||
if (obj_free(objspace, vp)) {
|
||||
@ -8578,12 +8575,6 @@ gc_report_body(int level, rb_objspace_t *objspace, const char *fmt, ...)
|
||||
|
||||
/* bit operations */
|
||||
|
||||
static int
|
||||
rgengc_remembersetbits_get(rb_objspace_t *objspace, VALUE obj)
|
||||
{
|
||||
return RVALUE_REMEMBERED(obj);
|
||||
}
|
||||
|
||||
static int
|
||||
rgengc_remembersetbits_set(rb_objspace_t *objspace, VALUE obj)
|
||||
{
|
||||
@ -8607,7 +8598,7 @@ static int
|
||||
rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
||||
{
|
||||
gc_report(6, objspace, "rgengc_remember: %s %s\n", obj_info(obj),
|
||||
rgengc_remembersetbits_get(objspace, obj) ? "was already remembered" : "is remembered now");
|
||||
RVALUE_REMEMBERED(obj) ? "was already remembered" : "is remembered now");
|
||||
|
||||
check_rvalue_consistency(obj);
|
||||
|
||||
@ -8616,7 +8607,7 @@ rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
||||
}
|
||||
|
||||
#if RGENGC_PROFILE > 0
|
||||
if (!rgengc_remembered(objspace, obj)) {
|
||||
if (!RVALUE_REMEMBERED(obj)) {
|
||||
if (RVALUE_WB_UNPROTECTED(obj) == 0) {
|
||||
objspace->profile.total_remembered_normal_object_count++;
|
||||
#if RGENGC_PROFILE >= 2
|
||||
@ -8629,21 +8620,6 @@ rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
||||
return rgengc_remembersetbits_set(objspace, obj);
|
||||
}
|
||||
|
||||
static int
|
||||
rgengc_remembered_sweep(rb_objspace_t *objspace, VALUE obj)
|
||||
{
|
||||
int result = rgengc_remembersetbits_get(objspace, obj);
|
||||
check_rvalue_consistency(obj);
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
rgengc_remembered(rb_objspace_t *objspace, VALUE obj)
|
||||
{
|
||||
gc_report(6, objspace, "rgengc_remembered: %s\n", obj_info(obj));
|
||||
return rgengc_remembered_sweep(objspace, obj);
|
||||
}
|
||||
|
||||
#ifndef PROFILE_REMEMBERSET_MARK
|
||||
#define PROFILE_REMEMBERSET_MARK 0
|
||||
#endif
|
||||
@ -8749,7 +8725,7 @@ gc_writebarrier_generational(VALUE a, VALUE b, rb_objspace_t *objspace)
|
||||
}
|
||||
|
||||
/* mark `a' and remember (default behavior) */
|
||||
if (!rgengc_remembered(objspace, a)) {
|
||||
if (!RVALUE_REMEMBERED(a)) {
|
||||
RB_VM_LOCK_ENTER_NO_BARRIER();
|
||||
{
|
||||
rgengc_remember(objspace, a);
|
||||
@ -8844,7 +8820,7 @@ rb_gc_writebarrier_unprotect(VALUE obj)
|
||||
rb_objspace_t *objspace = &rb_objspace;
|
||||
|
||||
gc_report(2, objspace, "rb_gc_writebarrier_unprotect: %s %s\n", obj_info(obj),
|
||||
rgengc_remembered(objspace, obj) ? " (already remembered)" : "");
|
||||
RVALUE_REMEMBERED(obj) ? " (already remembered)" : "");
|
||||
|
||||
RB_VM_LOCK_ENTER_NO_BARRIER();
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user