Use main_thread->ec from rb_vm_main_ractor_ec

rb_vm_main_ractor_ec was introduced to allow rb_postponed_job_* to work
when fired on non-Ruby threads, which have no EC set, and that is its
only use.

When RUBY_MN_THREADS=1 is set ractor->threads.running_ec is NULL when
the shared thread is sleeping. This instead grabs the EC directly from
the main thread which seems to always be set.

Fixes [Bug #20016]

Co-authored-by: Dustin Brown <dbrown9@gmail.com>
This commit is contained in:
John Hawthorn 2023-12-20 15:29:03 -08:00
parent 1710eb9367
commit 1f0304218c

View File

@ -2481,7 +2481,7 @@ rb_ractor_terminate_all(void)
rb_execution_context_t * rb_execution_context_t *
rb_vm_main_ractor_ec(rb_vm_t *vm) rb_vm_main_ractor_ec(rb_vm_t *vm)
{ {
return vm->ractor.main_ractor->threads.running_ec; return vm->ractor.main_thread->ec;
} }
static VALUE static VALUE