Open
Description
As of Timeout 0.3.0 you can no longer use Timeout
in a signal trap handler due to Mutex#synchronize
not being callable inside a trap context. I haven't done a git bisect but I believe this was broken in 5e0d8e1 due to the addition of a mutex on @done
.
This works fine with 0.2.0
.
require "timeout"
rd, wr = IO.pipe
trap("SIGUSR1") do
Timeout.timeout(1) do
end
# Close the pipe writer to unblock the main thread
wr.close
end
# Send USR1 to the current process
Process.kill("USR1", Process.pid)
# Wait for the timeout in the signal handler
rd.read
rd.close
Exception
./ruby-3.1.2/gems/timeout-0.3.0/lib/timeout.rb:128:in `synchronize': can't be called from trap context (ThreadError)
from ./ruby-3.1.2/gems/timeout-0.3.0/lib/timeout.rb:128:in `ensure_timeout_thread_created'
from ./ruby-3.1.2/gems/timeout-0.3.0/lib/timeout.rb:171:in `timeout'
from test.rb:6:in `block in <main>'
from test.rb:12:in `kill'
from test.rb:12:in `<main>'
Metadata
Metadata
Assignees
Labels
No labels