[Bug #18014] Fix rb_gc_force_recycle unmark before sweep

If we force recycle an object before the page is swept, we should clear
it in the mark bitmap. If we don't clear it in the bitmap, then during
sweeping we won't account for this free slot so the `free_slots` count
of the page will be incorrect.
This commit is contained in:
Peter Zhu 2021-06-29 14:32:28 -04:00
Родитель 3e7a7fb28a
Коммит 119697f61e
1 изменённых файлов: 1 добавлений и 1 удалений

2
gc.c
Просмотреть файл

@ -8671,7 +8671,7 @@ rb_gc_force_recycle(VALUE obj)
}
else {
#endif
if (is_old || !GET_HEAP_PAGE(obj)->flags.before_sweep) {
if (is_old || GET_HEAP_PAGE(obj)->flags.before_sweep) {
CLEAR_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj);
}
CLEAR_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj);