From: "luke-gru (Luke Gruber) via ruby-core" Date: 2023-02-01T22:21:36+00:00 Subject: [ruby-core:112175] [Ruby master Bug#19395] Process forking within non-main Ractor hits rb_bug() Issue #19395 has been updated by luke-gru (Luke Gruber). This fixes it: https://github.com/luke-gru/ruby/commit/0cb53d4458eb09d8a3f70caaa44c688b48bacaaf The issue is that when there's multiple ractors and you call fork, the other ractor(s) that are in the child process that aren't the new main ractor need to be GC'd, and their mutexes could be in a weird state, so either skip destruction of them or reinitialize them in the child process. Re-init works on my machine but I don't know if it works across platforms. ---------------------------------------- Bug #19395: Process forking within non-main Ractor hits rb_bug() https://bugs.ruby-lang.org/issues/19395#change-101612 * Author: luke-gru (Luke Gruber) * Status: Feedback * Priority: Normal * ruby -v: 3.2.0 * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- ```ruby def test_fork_in_ractor r2 = Ractor.new do pid = fork do exit Ractor.count end pid end pid = r2.take puts "Process #{Process.pid} waiting for #{pid}" _pid, status = Process.waitpid2(pid) # stuck forever if status.exitstatus != 1 raise "status is #{status.exitstatus}" end end test_fork_in_ractor() ``` $ top # shows CPU usage is high for child process -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/