summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2021-06-29 14:32:54 -0400
committerPeter Zhu <peter@peterzhu.ca>2021-07-15 11:48:52 -0400
commite5fe48646c68be0bd45fb8a1d7de36da00eaec4d (patch)
treeac6642b331ee35eb104170241520da1f39259bd0 /gc.c
parent4a627dbdfd1165022fa9e716ba845e937b03773d (diff)
[Bug #18014] Add assertion to verify freelist
This commit adds an assertion has been added after `gc_page_sweep` to verify that the freelist length is equal to the number of free slots in the page.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4613
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 9af83de055..9ccd26d19c 100644
--- a/gc.c
+++ b/gc.c
@@ -5483,6 +5483,18 @@ gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_
}
}
+#if RGENGC_CHECK_MODE
+ short freelist_len = 0;
+ RVALUE *ptr = sweep_page->freelist;
+ while (ptr) {
+ freelist_len++;
+ ptr = ptr->as.free.next;
+ }
+ if (freelist_len != sweep_page->free_slots) {
+ rb_bug("inconsistent freelist length: expected %d but was %d", sweep_page->free_slots, freelist_len);
+ }
+#endif
+
gc_report(2, objspace, "page_sweep: end.\n");
return ctx.freed_slots + ctx.empty_slots;