@@ -1853,7 +1853,10 @@ static struct heap_page *
18531853heap_page_resurrect (rb_objspace_t * objspace )
18541854{
18551855 struct heap_page * page = NULL ;
1856- if (objspace -> empty_pages != NULL ) {
1856+ if (objspace -> empty_pages == NULL ) {
1857+ GC_ASSERT (objspace -> empty_pages_count == 0 );
1858+ }
1859+ else {
18571860 GC_ASSERT (objspace -> empty_pages_count > 0 );
18581861 objspace -> empty_pages_count -- ;
18591862 page = objspace -> empty_pages ;
@@ -1973,6 +1976,8 @@ heap_page_allocate_and_initialize(rb_objspace_t *objspace, rb_heap_t *heap)
19731976 if (page == NULL && objspace -> heap_pages .allocatable_slots > 0 ) {
19741977 page = heap_page_allocate (objspace );
19751978 allocated = true;
1979+
1980+ GC_ASSERT (page != NULL );
19761981 }
19771982
19781983 if (page != NULL ) {
@@ -3922,12 +3927,14 @@ gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *sweep_heap)
39223927
39233928 for (int i = 0 ; i < HEAP_COUNT ; i ++ ) {
39243929 rb_heap_t * heap = & heaps [i ];
3925- if (!gc_sweep_step (objspace , heap )) {
3926- if (heap == sweep_heap && objspace -> empty_pages_count == 0 && objspace -> heap_pages .allocatable_slots == 0 ) {
3927- /* Not allowed to create a new page so finish sweeping. */
3928- gc_sweep_rest (objspace );
3929- break ;
3930- }
3930+ if (gc_sweep_step (objspace , heap )) {
3931+ GC_ASSERT (heap -> free_pages != NULL );
3932+ }
3933+ else if (heap == sweep_heap && objspace -> empty_pages_count == 0 && objspace -> heap_pages .allocatable_slots == 0 ) {
3934+ /* Not allowed to create a new page so finish sweeping. */
3935+ gc_sweep_rest (objspace );
3936+ GC_ASSERT (gc_mode (objspace ) == gc_mode_none );
3937+ break ;
39313938 }
39323939 }
39333940
0 commit comments