From 8c01dec8275739f247eedc505723c6585da13c4b Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 26 Aug 2024 10:59:57 -0400 Subject: [PATCH] Skip assertion in gc/default.c when multi-Ractor The counter for total allocated objects may not be accurate when there are multiple Ractors since it is not atomic so there could be race conditions when it is incremented. --- gc/default.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gc/default.c b/gc/default.c index 9038df3810..9d0d05c3a1 100644 --- a/gc/default.c +++ b/gc/default.c @@ -2637,8 +2637,9 @@ newobj_alloc(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t si rb_size_pool_t *size_pool = &size_pools[size_pool_idx]; size_pool->total_allocated_objects++; - GC_ASSERT(SIZE_POOL_EDEN_HEAP(size_pool)->total_slots + SIZE_POOL_TOMB_HEAP(size_pool)->total_slots >= - (size_pool->total_allocated_objects - size_pool->total_freed_objects - size_pool->final_slots_count)); + GC_ASSERT(rb_gc_multi_ractor_p() || + SIZE_POOL_EDEN_HEAP(size_pool)->total_slots + SIZE_POOL_TOMB_HEAP(size_pool)->total_slots >= + (size_pool->total_allocated_objects - size_pool->total_freed_objects - size_pool->final_slots_count)); return obj; }