From 339978ef3869acb2ff877451381a80ee4b548bfb Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Fri, 22 Dec 2023 12:15:07 -0800 Subject: [PATCH] Free default_rand_key after freeing Ractors Ractor's free iterates through its TLS keys so we need to keep this memory available until after Ractors are freed. Minimal reproduction: RUBY_FREE_AT_EXIT=1 ./miniruby -e rand --- vm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm.c b/vm.c index d2ec9a7f53..6334459579 100644 --- a/vm.c +++ b/vm.c @@ -2994,7 +2994,6 @@ ruby_vm_destruct(rb_vm_t *vm) rb_thread_t *th = vm->ractor.main_thread; VALUE *stack = th->ec->vm_stack; if (rb_free_at_exit) { - rb_free_default_rand_key(); rb_free_encoded_insn_data(); rb_free_global_enc_table(); rb_free_loaded_builtin_table(); @@ -3056,6 +3055,7 @@ ruby_vm_destruct(rb_vm_t *vm) if (rb_free_at_exit) { rb_objspace_free_objects(objspace); rb_free_generic_iv_tbl_(); + rb_free_default_rand_key(); if (th) { xfree(stack); ruby_mimfree(th);