summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-30 14:49:45 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-30 14:49:45 +0000
commitda42035b09065c3efdb0115e6d30fde08ea5c82c (patch)
treedbe58bb1f42e5c17e6a2c4d98475b3fa2a255369 /signal.c
parent29c7c72e09b28e2dd35ac73805b33604c6e4ae09 (diff)
* signal.c (ruby_signal): use SA_SIGINFO if available.
[ ruby-Patches-6418 ] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/signal.c b/signal.c
index 6eba832e5d..5723d7f031 100644
--- a/signal.c
+++ b/signal.c
@@ -414,9 +414,15 @@ ruby_signal(int signum, sighandler_t handler)
rb_trap_accept_nativethreads[signum] = 0;
- sigact.sa_handler = handler;
sigemptyset(&sigact.sa_mask);
+#ifdef SA_SIGINFO
+ sigact.sa_sigaction = (void (*)(int, siginfo_t*, void*))handler;
+ sigact.sa_flags = SA_SIGINFO;
+#else
+ sigact.sa_handler = handler;
sigact.sa_flags = 0;
+#endif
+
#ifdef SA_NOCLDWAIT
if (signum == SIGCHLD && handler == SIG_IGN)
sigact.sa_flags |= SA_NOCLDWAIT;
@@ -425,7 +431,7 @@ ruby_signal(int signum, sighandler_t handler)
return old.sa_handler;
}
-void
+sighandler_t
posix_signal(int signum, sighandler_t handler)
{
ruby_signal(signum, handler);