1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[Feature #18619] remove FL_FROM_FREELIST

This commit is contained in:
Matt Valentine-House 2022-03-21 20:46:58 +00:00 committed by Peter Zhu
parent c26a85fc96
commit d8352ff3ac
Notes: git 2022-04-01 21:46:19 +09:00

12
gc.c
View file

@ -564,8 +564,6 @@ typedef struct gc_profile_record {
#endif #endif
} gc_profile_record; } gc_profile_record;
#define FL_FROM_FREELIST FL_USER0
struct RMoved { struct RMoved {
VALUE flags; VALUE flags;
VALUE dummy; VALUE dummy;
@ -5034,7 +5032,6 @@ try_move(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *free_page,
gc_move(objspace, src, dest, free_page->slot_size); gc_move(objspace, src, dest, free_page->slot_size);
gc_pin(objspace, src); gc_pin(objspace, src);
FL_SET(src, FL_FROM_FREELIST);
free_page->free_slots--; free_page->free_slots--;
} }
@ -5311,12 +5308,7 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
rb_bug("T_MOVED shouldn't be seen until compaction is finished\n"); rb_bug("T_MOVED shouldn't be seen until compaction is finished\n");
} }
gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(vp)); gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(vp));
if (FL_TEST(vp, FL_FROM_FREELIST)) {
ctx->empty_slots++; ctx->empty_slots++;
}
else {
ctx->freed_slots++;
}
heap_page_add_freeobj(objspace, sweep_page, vp); heap_page_add_freeobj(objspace, sweep_page, vp);
break; break;
case T_ZOMBIE: case T_ZOMBIE:
@ -5764,7 +5756,6 @@ invalidate_moved_plane(rb_objspace_t *objspace, struct heap_page *page, uintptr_
CLEAR_IN_BITMAP(GET_HEAP_PINNED_BITS(forwarding_object), forwarding_object); CLEAR_IN_BITMAP(GET_HEAP_PINNED_BITS(forwarding_object), forwarding_object);
bool from_freelist = FL_TEST_RAW(forwarding_object, FL_FROM_FREELIST);
object = rb_gc_location(forwarding_object); object = rb_gc_location(forwarding_object);
gc_move(objspace, object, forwarding_object, page->slot_size); gc_move(objspace, object, forwarding_object, page->slot_size);
@ -5772,9 +5763,6 @@ invalidate_moved_plane(rb_objspace_t *objspace, struct heap_page *page, uintptr_
* is the free slot for the original page */ * is the free slot for the original page */
struct heap_page *orig_page = GET_HEAP_PAGE(object); struct heap_page *orig_page = GET_HEAP_PAGE(object);
orig_page->free_slots++; orig_page->free_slots++;
if (!from_freelist) {
objspace->profile.total_freed_objects++;
}
heap_page_add_freeobj(objspace, orig_page, object); heap_page_add_freeobj(objspace, orig_page, object);
GC_ASSERT(MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(forwarding_object), forwarding_object)); GC_ASSERT(MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(forwarding_object), forwarding_object));