[ruby-core:122685] [Ruby Bug#21505] [Ractor] calling exit from non-main ractor will hang if main ractor waits on it

Issue #21505 has been reported by luke-gru (Luke Gruber). ---------------------------------------- Bug #21505: [Ractor] calling exit from non-main ractor will hang if main ractor waits on it https://bugs.ruby-lang.org/issues/21505 * Author: luke-gru (Luke Gruber) * Status: Open * Assignee: ractor * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ```ruby r = Ractor.new do exit end r.join # hangs ``` Should `exit` be allowed in ractors? It would be easiest to disallow, as the code might be tricky if we allow it. -- https://bugs.ruby-lang.org/

Issue #21505 has been updated by Eregon (Benoit Daloze). `Kernel#exit` is basically just `raise SystemExit`, does it mean any exception in a Ractor hangs? IOW, I don't think it should be disallow because `exit` is just an Exception. ---------------------------------------- Bug #21505: [Ractor] calling exit from non-main ractor will hang if main ractor waits on it https://bugs.ruby-lang.org/issues/21505#change-113967 * Author: luke-gru (Luke Gruber) * Status: Open * Assignee: ractor * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ```ruby r = Ractor.new do exit end r.join # hangs ``` Should `exit` be allowed in ractors? It would be easiest to disallow, as the code might be tricky if we allow it. -- https://bugs.ruby-lang.org/

Issue #21505 has been updated by luke-gru (Luke Gruber). Yeah fair enough. It's probably not as complicated to fix as I initially thought. ---------------------------------------- Bug #21505: [Ractor] calling exit from non-main ractor will hang if main ractor waits on it https://bugs.ruby-lang.org/issues/21505#change-113968 * Author: luke-gru (Luke Gruber) * Status: Open * Assignee: ractor * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ```ruby r = Ractor.new do exit end r.join # hangs ``` Should `exit` be allowed in ractors? It would be easiest to disallow, as the code might be tricky if we allow it. -- https://bugs.ruby-lang.org/

Issue #21505 has been updated by jhawthorn (John Hawthorn). I opened https://github.com/ruby/ruby/pull/13838 which fixes this ``` ./miniruby -e 'Ractor.new { exit }.join' -e:1: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues. -e:1:in 'Ractor#join': thrown by remote Ractor. (Ractor::RemoteError) from -e:1:in '<main>' -e:1:in 'Kernel#exit': exit (SystemExit) from -e:1:in 'block in <main>' ``` In this PR we end up wrapping `SystemExit` in a `Ractor::RemoteError` rather than exiting the program. I don't know if that's the most desirable behaviour (versus translating back to SystemExit), but it makes sense to me as calling `exit` in a Ractor is a bit strange. ---------------------------------------- Bug #21505: [Ractor] calling exit from non-main ractor will hang if main ractor waits on it https://bugs.ruby-lang.org/issues/21505#change-113977 * Author: luke-gru (Luke Gruber) * Status: Open * Assignee: ractor * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ```ruby r = Ractor.new do exit end r.join # hangs ``` Should `exit` be allowed in ractors? It would be easiest to disallow, as the code might be tricky if we allow it. -- https://bugs.ruby-lang.org/
participants (3)
-
Eregon (Benoit Daloze)
-
jhawthorn (John Hawthorn)
-
luke-gru (Luke Gruber)