diff options
author | Peter Zhu <peter@peterzhu.ca> | 2021-06-29 14:32:54 -0400 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2021-07-15 11:48:52 -0400 |
commit | e5fe48646c68be0bd45fb8a1d7de36da00eaec4d (patch) | |
tree | ac6642b331ee35eb104170241520da1f39259bd0 /gc.c | |
parent | 4a627dbdfd1165022fa9e716ba845e937b03773d (diff) | |
download | ruby-e5fe48646c68be0bd45fb8a1d7de36da00eaec4d.tar.gz |
[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.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -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; |