From 89d49433a9229d13fa8df7945876a8b83413434c Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Tue, 3 Jun 2025 11:33:03 -0400 Subject: [PATCH] Fix memory leak of Ractor ports Memory leak reported: 3 miniruby 0x1044b6c1c ractor_init + 164 ractor.c:460 2 miniruby 0x1043fd6a0 ruby_xmalloc + 44 gc.c:5188 1 miniruby 0x104402840 rb_gc_impl_malloc + 148 default.c:8140 0 libsystem_malloc.dylib 0x19ab3912c _malloc_zone_malloc_instrumented_or_legacy + 152 --- ractor_sync.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ractor_sync.c b/ractor_sync.c index 31ac2df4cf..0fcc293504 100644 --- a/ractor_sync.c +++ b/ractor_sync.c @@ -660,6 +660,16 @@ ractor_sync_mark(rb_ractor_t *r) ractor_mark_monitors(r); } +static int +ractor_sync_free_ports_i(st_data_t _key, st_data_t val, st_data_t _args) +{ + struct ractor_queue *queue = (struct ractor_queue *)val; + + ractor_queue_free(queue); + + return ST_CONTINUE; +} + static void ractor_sync_free(rb_ractor_t *r) { @@ -669,6 +679,7 @@ ractor_sync_free(rb_ractor_t *r) // maybe NULL if (r->sync.ports) { + st_foreach(r->sync.ports, ractor_sync_free_ports_i, 0); st_free_table(r->sync.ports); r->sync.ports = NULL; }