diff --git a/ChangeLog b/ChangeLog index 1d84a2044e..936c8b77f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat May 10 08:47:36 2014 Tanaka Akira + + * signal.c (trap): Return "SYSTEM_DEFAULT" if SIG_DFL is set. + Fri May 9 14:27:05 2014 Nobuyoshi Nakada * configure.in (RUBY_SETJMP_TYPE): check for setjmp type after diff --git a/signal.c b/signal.c index 8625d942d4..7dc4247220 100644 --- a/signal.c +++ b/signal.c @@ -976,6 +976,7 @@ trap(int sig, sighandler_t func, VALUE command) switch (oldcmd) { case 0: if (oldfunc == SIG_IGN) oldcmd = rb_str_new2("IGNORE"); + else if (oldfunc == SIG_DFL) oldcmd = rb_str_new2("SYSTEM_DEFAULT"); else if (oldfunc == sighandler) oldcmd = rb_str_new2("DEFAULT"); else oldcmd = Qnil; break; diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb index 14be2d76aa..68da0d5840 100644 --- a/test/ruby/test_signal.rb +++ b/test/ruby/test_signal.rb @@ -175,6 +175,13 @@ class TestSignal < Test::Unit::TestCase end; end if Process.respond_to?(:kill) + def test_trap_system_default + assert_separately([], <<-End) + trap(:QUIT, "SYSTEM_DEFAULT") + assert_equal("SYSTEM_DEFAULT", trap(:QUIT, "DEFAULT")) + End + end + def test_signal_requiring t = Tempfile.new(%w"require_ensure_test .rb") t.puts "sleep"