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_UNCOLLECTIBLE(page, obj) MARKED_IN_BITMAP((page)->uncollectible_bits, (obj))
|
||||||
#define RVALUE_PAGE_MARKING(page, obj) MARKED_IN_BITMAP((page)->marking_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 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_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);
|
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_OLD_P(obj) == FALSE);
|
||||||
GC_ASSERT(RVALUE_WB_UNPROTECTED(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();
|
RB_VM_LOCK_LEAVE_NO_BARRIER();
|
||||||
#endif
|
#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 RGENGC_CHECK_MODE
|
||||||
if (!is_full_marking(objspace)) {
|
if (!is_full_marking(objspace)) {
|
||||||
if (RVALUE_OLD_P(vp)) rb_bug("page_sweep: %p - old while minor GC.", (void *)p);
|
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
|
#endif
|
||||||
if (obj_free(objspace, vp)) {
|
if (obj_free(objspace, vp)) {
|
||||||
@ -8578,12 +8575,6 @@ gc_report_body(int level, rb_objspace_t *objspace, const char *fmt, ...)
|
|||||||
|
|
||||||
/* bit operations */
|
/* bit operations */
|
||||||
|
|
||||||
static int
|
|
||||||
rgengc_remembersetbits_get(rb_objspace_t *objspace, VALUE obj)
|
|
||||||
{
|
|
||||||
return RVALUE_REMEMBERED(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rgengc_remembersetbits_set(rb_objspace_t *objspace, VALUE obj)
|
rgengc_remembersetbits_set(rb_objspace_t *objspace, VALUE obj)
|
||||||
{
|
{
|
||||||
@ -8607,7 +8598,7 @@ static int
|
|||||||
rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
||||||
{
|
{
|
||||||
gc_report(6, objspace, "rgengc_remember: %s %s\n", obj_info(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);
|
check_rvalue_consistency(obj);
|
||||||
|
|
||||||
@ -8616,7 +8607,7 @@ rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if RGENGC_PROFILE > 0
|
#if RGENGC_PROFILE > 0
|
||||||
if (!rgengc_remembered(objspace, obj)) {
|
if (!RVALUE_REMEMBERED(obj)) {
|
||||||
if (RVALUE_WB_UNPROTECTED(obj) == 0) {
|
if (RVALUE_WB_UNPROTECTED(obj) == 0) {
|
||||||
objspace->profile.total_remembered_normal_object_count++;
|
objspace->profile.total_remembered_normal_object_count++;
|
||||||
#if RGENGC_PROFILE >= 2
|
#if RGENGC_PROFILE >= 2
|
||||||
@ -8629,21 +8620,6 @@ rgengc_remember(rb_objspace_t *objspace, VALUE obj)
|
|||||||
return rgengc_remembersetbits_set(objspace, 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
|
#ifndef PROFILE_REMEMBERSET_MARK
|
||||||
#define PROFILE_REMEMBERSET_MARK 0
|
#define PROFILE_REMEMBERSET_MARK 0
|
||||||
#endif
|
#endif
|
||||||
@ -8749,7 +8725,7 @@ gc_writebarrier_generational(VALUE a, VALUE b, rb_objspace_t *objspace)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* mark `a' and remember (default behavior) */
|
/* mark `a' and remember (default behavior) */
|
||||||
if (!rgengc_remembered(objspace, a)) {
|
if (!RVALUE_REMEMBERED(a)) {
|
||||||
RB_VM_LOCK_ENTER_NO_BARRIER();
|
RB_VM_LOCK_ENTER_NO_BARRIER();
|
||||||
{
|
{
|
||||||
rgengc_remember(objspace, a);
|
rgengc_remember(objspace, a);
|
||||||
@ -8844,7 +8820,7 @@ rb_gc_writebarrier_unprotect(VALUE obj)
|
|||||||
rb_objspace_t *objspace = &rb_objspace;
|
rb_objspace_t *objspace = &rb_objspace;
|
||||||
|
|
||||||
gc_report(2, objspace, "rb_gc_writebarrier_unprotect: %s %s\n", obj_info(obj),
|
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();
|
RB_VM_LOCK_ENTER_NO_BARRIER();
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user