summaryrefslogtreecommitdiff
path: root/gc/default/default.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc/default/default.c')
-rw-r--r--gc/default/default.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gc/default/default.c b/gc/default/default.c
index 157873bc1c..b3887a5c28 100644
--- a/gc/default/default.c
+++ b/gc/default/default.c
@@ -3659,13 +3659,19 @@ static int compare_pinned_slots(const void *left, const void *right, void *d);
static void
gc_ractor_newobj_cache_clear(void *c, void *data)
{
+ rb_objspace_t *objspace = rb_gc_get_objspace();
rb_ractor_newobj_cache_t *newobj_cache = c;
newobj_cache->incremental_mark_step_allocated_slots = 0;
for (size_t heap_idx = 0; heap_idx < HEAP_COUNT; heap_idx++) {
+
rb_ractor_newobj_heap_cache_t *cache = &newobj_cache->heap_caches[heap_idx];
+ rb_heap_t *heap = &heaps[heap_idx];
+ RUBY_ATOMIC_SIZE_ADD(heap->total_allocated_objects, cache->allocated_objects_count);
+ cache->allocated_objects_count = 0;
+
struct heap_page *page = cache->using_page;
struct free_slot *freelist = cache->freelist;
RUBY_DEBUG_LOG("ractor using_page:%p freelist:%p", (void *)page, (void *)freelist);
@@ -6161,8 +6167,6 @@ rb_gc_impl_ractor_cache_free(void *objspace_ptr, void *cache)
for (size_t heap_idx = 0; heap_idx < HEAP_COUNT; heap_idx++) {
rb_heap_t *heap = &heaps[heap_idx];
rb_ractor_newobj_heap_cache_t *heap_cache = &newobj_cache->heap_caches[heap_idx];
- RUBY_ATOMIC_SIZE_ADD(heap->total_allocated_objects, heap_cache->allocated_objects_count);
- heap_cache->allocated_objects_count = 0;
}
gc_ractor_newobj_cache_clear(cache, NULL);
@@ -9220,7 +9224,9 @@ gc_malloc_allocations(VALUE self)
#endif
void rb_gc_impl_before_fork(void *objspace_ptr) { /* no-op */ }
-void rb_gc_impl_after_fork(void *objspace_ptr, rb_pid_t pid) { /* no-op */ }
+void rb_gc_impl_after_fork(void *objspace_ptr, rb_pid_t pid) {
+ rb_gc_ractor_newobj_cache_foreach(gc_ractor_newobj_cache_clear, NULL);
+}
VALUE rb_ident_hash_new_with_size(st_index_t size);