Skip to content

Commit 149add8

Browse files
committed
Don't free Ractors in GC shutdown
rb_gc_shutdown_call_finalizer_p returns false for threads and fibers, so it should probably do the same for all Ractors (not just the main one). This hopefully mitigates a bug where, at exit, rb_ractor_terminate_all gets all Ractors to stop before continuing with the shutdown process. However when vm->ractor.cnt reaches 1, the native threads may still be running code at the end co_start, which reads/locks on th->ractor->threads.sched, so the Ractor is not safe to free. A better solution might be to ensure that all native threads end up stopped or otherwise parked before this part of the shutdown, however that would be a bit more involved.
1 parent 88906e1 commit 149add8

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

gc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ rb_gc_shutdown_call_finalizer_p(VALUE obj)
343343
if (rb_obj_is_thread(obj)) return false;
344344
if (rb_obj_is_mutex(obj)) return false;
345345
if (rb_obj_is_fiber(obj)) return false;
346-
if (rb_obj_is_main_ractor(obj)) return false;
346+
if (rb_ractor_p(obj)) return false;
347347
if (rb_obj_is_fstring_table(obj)) return false;
348348
if (rb_obj_is_symbol_table(obj)) return false;
349349

0 commit comments

Comments
 (0)