[#119637] Behavior of raising from rescue blocks when multiple rescue blocks exist — Rodrigo Rosenfeld Rosas via ruby-core <ruby-core@...>
Hello, I couldn't find any documentation about the subject, so I thought
3 messages
2024/10/29
[ruby-core:119559] [Ruby master Feature#20805] Allow Ractor#send from a signal trap Proc
From:
"kirs (Kir Shatrov) via ruby-core" <ruby-core@...>
Date:
2024-10-21 08:50:23 UTC
List:
ruby-core #119559
Issue #20805 has been reported by kirs (Kir Shatrov).
----------------------------------------
Feature #20805: Allow Ractor#send from a signal trap Proc
https://bugs.ruby-lang.org/issues/20805
* Author: kirs (Kir Shatrov)
* Status: Open
----------------------------------------
It was surfaced in https://bugs.ruby-lang.org/issues/18139 that Ractor is designed to "unexpected interruption free" and it's not supposed to have a `kill`-like method.
A better alternative to that would be allow the main Ractor to consume a shutdown signal from the pipe.
Example:
```ruby
shutdown_ractor = Ractor.new do
Ractor.recv # Wait for a signal
end
# Signal trap for SIGTERM
Signal.trap("TERM") do
puts "Received SIGTERM, shutting down..."
shutdown_ractor.send(:shutdown) # Send the shutdown signal
end
pipe = Ractor.new do
loop do
r, value = Ractor.select(Ractor.recv, shutdown_ractor)
if r == shutdown_ractor # Shutdown signal received
break
else
Ractor.yield(value, move: true) # Normal operation
end
end
end
```
However, it's not possible to do `Ractor#send` from a trap Proc right now:
```
<internal:ractor>:282:in `new': can not isolate a Proc because it accesses outer variables (shutdown_ractor). (ArgumentError)
```
>>From what I've gathered, it makes it impossible to implement any graceful shutdown in a process with a few Ractors running.
--
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/lists/ruby-core.ml.ruby-lang.org/