diff --git a/src/gc.c b/src/gc.c index 768d091b6..ad491a30e 100644 --- a/src/gc.c +++ b/src/gc.c @@ -297,17 +297,6 @@ mrb_object_dead_p(mrb_state *mrb, struct RBasic *object) return is_dead(gc, object); } -static void -unlink_heap_page(mrb_gc *gc, mrb_heap_page *page) -{ - if (page->prev) - page->prev->next = page->next; - if (page->next) - page->next->prev = page->prev; - if (gc->heaps == page) - gc->heaps = page->next; -} - static void add_heap(mrb_state *mrb, mrb_gc *gc) { @@ -1115,7 +1104,14 @@ incremental_sweep_phase(mrb_state *mrb, mrb_gc *gc, size_t limit) if (dead_slot) { mrb_heap_page *next = page->next; - unlink_heap_page(gc, page); + /* unlink_heap_page */ + if (page->prev) + page->prev->next = page->next; + if (page->next) + page->next->prev = page->prev; + if (gc->heaps == page) + gc->heaps = page->next; + mrb_free(mrb, page); page = next; }