diff options
author | Peter Zhu <peter@peterzhu.ca> | 2022-07-06 17:00:13 -0400 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2022-07-07 09:39:28 -0400 |
commit | d7c5a6d49ba7fe62f7d2bf538be813234db20783 (patch) | |
tree | 9380065075fd33f9be1cd5011e4b1c2e195782aa /gc.c | |
parent | 7f64989e5c913ef7624e084badd1a43ce65b3ccc (diff) | |
download | ruby-d7c5a6d49ba7fe62f7d2bf538be813234db20783.tar.gz |
Fix typo in gc_compact_move
The page we're sweeping is on the destination heap `dheap`, not the
source heap `heap`.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -5521,6 +5521,7 @@ static inline void gc_sweep_page(rb_objspace_t *objspace, rb_heap_t *heap, struct gc_sweep_context *ctx) { struct heap_page *sweep_page = ctx->page; + GC_ASSERT(SIZE_POOL_EDEN_HEAP(sweep_page->size_pool) == heap); uintptr_t p; bits_t *bits, bitset; @@ -8321,6 +8322,7 @@ gc_compact_move(rb_objspace_t *objspace, rb_heap_t *heap, rb_size_pool_t *size_p if (gc_compact_heap_cursors_met_p(dheap)) { return dheap != heap; } + while (!try_move(objspace, dheap, dheap->free_pages, src)) { struct gc_sweep_context ctx = { .page = dheap->sweeping_page, @@ -8328,7 +8330,9 @@ gc_compact_move(rb_objspace_t *objspace, rb_heap_t *heap, rb_size_pool_t *size_p .freed_slots = 0, .empty_slots = 0, }; - gc_sweep_page(objspace, heap, &ctx); + + gc_sweep_page(objspace, dheap, &ctx); + if (dheap->sweeping_page->free_slots > 0) { heap_add_freepage(dheap, dheap->sweeping_page); }; |