From 474b4c42f4d1c36d94548548e03f6649f2119f67 Mon Sep 17 00:00:00 2001 From: HParker Date: Thu, 14 Dec 2023 12:03:00 -0800 Subject: [PATCH] free ractors with ractor_free Previously with RUBY_FREE_ON_EXIT, ractors where being xfree-ed which is incorrect since they are not xmalloced. Instead we can free ractors with ractor free during shutdown. This change only effects main ractor freeing when RUBY_FREE_ON_EXIT is set. Co-authored-by: John Hawthorn --- gc.c | 2 +- vm.c | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/gc.c b/gc.c index 49e01bbd00..3a1ac4f4b9 100644 --- a/gc.c +++ b/gc.c @@ -4607,7 +4607,7 @@ rb_objspace_free_objects(rb_objspace_t *objspace) VALUE vp = (VALUE)p; switch (BUILTIN_TYPE(vp)) { case T_DATA: { - if (rb_obj_is_mutex(vp) || rb_obj_is_thread(vp)) { + if (rb_obj_is_mutex(vp) || rb_obj_is_thread(vp) || rb_obj_is_main_ractor(vp)) { obj_free(objspace, vp); } break; diff --git a/vm.c b/vm.c index f247838764..079809e05f 100644 --- a/vm.c +++ b/vm.c @@ -3006,9 +3006,6 @@ ruby_vm_destruct(rb_vm_t *vm) rb_free_warning(); rb_free_rb_global_tbl(); rb_free_loaded_features_index(vm); - rb_ractor_t *r = vm->ractor.main_ractor; - xfree(r->sync.recv_queue.baskets); - xfree(r->sync.takers_queue.baskets); rb_id_table_free(vm->negative_cme_table); st_free_table(vm->overloaded_cme_table); @@ -3060,7 +3057,6 @@ ruby_vm_destruct(rb_vm_t *vm) rb_objspace_free_objects(objspace); rb_free_generic_iv_tbl_(); if (th) { - xfree(th->ractor); xfree(stack); ruby_mimfree(th); }