aboutsummaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2022-07-06 17:00:13 -0400
committerPeter Zhu <peter@peterzhu.ca>2022-07-07 09:39:28 -0400
commitd7c5a6d49ba7fe62f7d2bf538be813234db20783 (patch)
tree9380065075fd33f9be1cd5011e4b1c2e195782aa /gc.c
parent7f64989e5c913ef7624e084badd1a43ce65b3ccc (diff)
downloadruby-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.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index 94837c4d91..29131a8f3a 100644
--- a/gc.c
+++ b/gc.c
@@ -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);
};