summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-15 09:58:10 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-15 09:58:10 +0000
commitcebc9bb19d219aaf5d035ff2d0e5fb69636bd2c1 (patch)
treed59baa6723297e06b43b8ee61390098d2da4fcb2 /signal.c
parente3dd9a78db1f918bd4e621492975b741269b5cb4 (diff)
* signal.c (trap_handler): trap("SIGSEGV", "DEFAULT") may cause wrong
trap error because SIG_DFL may be zero. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/signal.c b/signal.c
index 3f104b1854..ddb8dd97d3 100644
--- a/signal.c
+++ b/signal.c
@@ -634,10 +634,15 @@ struct trap_arg {
VALUE cmd;
};
+static RETSIGTYPE
+wrong_trap(int sig)
+{
+}
+
static sighandler_t
trap_handler(VALUE *cmd)
{
- sighandler_t func = 0;
+ sighandler_t func = wrong_trap;
VALUE command;
if (NIL_P(*cmd)) {
@@ -674,7 +679,7 @@ trap_handler(VALUE *cmd)
}
break;
}
- if (!func) {
+ if (func == wrong_trap) {
rb_raise(rb_eArgError, "wrong trap - %s", RSTRING_PTR(command));
}
}
@@ -1047,14 +1052,10 @@ Init_signal(void)
#endif
#ifdef SIGBUS
-# ifndef RUBY_GC_STRESS
install_sighandler(SIGBUS, sigbus);
-# endif
#endif
#ifdef SIGSEGV
-# ifndef RUBY_GC_STRESS
install_sighandler(SIGSEGV, sigsegv);
-# endif
#endif
#ifdef SIGPIPE
install_sighandler(SIGPIPE, sigpipe);