diff options
| author | Peter Zhu <peter@peterzhu.ca> | 2025-08-21 15:08:34 -0400 |
|---|---|---|
| committer | Peter Zhu <peter@peterzhu.ca> | 2025-08-22 10:13:35 -0400 |
| commit | 34cca18da35ffd3d1fe9009dcbe80881a8b2a8d1 (patch) | |
| tree | 0ec426f16ff060560ffd60d0ca9077904dd18a87 | |
| parent | 6fbe2dd36e30a2ecbfa770d3ebfbb8e601d97bd3 (diff) | |
Add more assertions to default.c
| -rw-r--r-- | gc/default/default.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/gc/default/default.c b/gc/default/default.c index d4e34b9d03..76ab5257b8 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -1853,7 +1853,10 @@ static struct heap_page * heap_page_resurrect(rb_objspace_t *objspace) { struct heap_page *page = NULL; - if (objspace->empty_pages != NULL) { + if (objspace->empty_pages == NULL) { + GC_ASSERT(objspace->empty_pages_count == 0); + } + else { GC_ASSERT(objspace->empty_pages_count > 0); objspace->empty_pages_count--; page = objspace->empty_pages; @@ -1973,6 +1976,8 @@ heap_page_allocate_and_initialize(rb_objspace_t *objspace, rb_heap_t *heap) if (page == NULL && objspace->heap_pages.allocatable_slots > 0) { page = heap_page_allocate(objspace); allocated = true; + + GC_ASSERT(page != NULL); } if (page != NULL) { @@ -3922,12 +3927,14 @@ gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *sweep_heap) for (int i = 0; i < HEAP_COUNT; i++) { rb_heap_t *heap = &heaps[i]; - if (!gc_sweep_step(objspace, heap)) { - if (heap == sweep_heap && objspace->empty_pages_count == 0 && objspace->heap_pages.allocatable_slots == 0) { - /* Not allowed to create a new page so finish sweeping. */ - gc_sweep_rest(objspace); - break; - } + if (gc_sweep_step(objspace, heap)) { + GC_ASSERT(heap->free_pages != NULL); + } + else if (heap == sweep_heap && objspace->empty_pages_count == 0 && objspace->heap_pages.allocatable_slots == 0) { + /* Not allowed to create a new page so finish sweeping. */ + gc_sweep_rest(objspace); + GC_ASSERT(gc_mode(objspace) == gc_mode_none); + break; } } |
