summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2025-12-11 14:16:49 +0100
committergit <svn-admin@ruby-lang.org>2025-12-11 13:38:35 +0000
commitb49ff7cc700ffdba26fabaaf8167eee189797edf (patch)
treef29a38dbefd6c82290c4f296ac994096e423ba45 /test
parent9865048a345a466b935226fa24515b32be664582 (diff)
[ruby/timeout] Make Timeout.timeout work in a trap handler on CRuby
* Fixes https://github.com/ruby/timeout/issues/17 https://github.com/ruby/timeout/commit/1a499a8f96
Diffstat (limited to 'test')
-rw-r--r--test/test_timeout.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/test_timeout.rb b/test/test_timeout.rb
index 01beadbda6..7421b5ba41 100644
--- a/test/test_timeout.rb
+++ b/test/test_timeout.rb
@@ -416,4 +416,33 @@ class TestTimeout < Test::Unit::TestCase
assert_equal :ok, r
end;
end if defined?(::Ractor) && RUBY_VERSION >= '4.0'
+
+ def test_timeout_in_trap_handler
+ # https://github.com/ruby/timeout/issues/17
+
+ # Test as if this was the first timeout usage
+ kill_timeout_thread
+
+ rd, wr = IO.pipe
+
+ trap("SIGUSR1") do
+ begin
+ Timeout.timeout(0.1) do
+ sleep 1
+ end
+ rescue Timeout::Error
+ wr.write "OK"
+ wr.close
+ else
+ wr.write "did not raise"
+ ensure
+ wr.close
+ end
+ end
+
+ Process.kill :USR1, Process.pid
+
+ assert_equal "OK", rd.read
+ rd.close
+ end
end