* 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
This commit is contained in:
parent
29c7c72e09
commit
da42035b09
@ -1,3 +1,8 @@
|
|||||||
|
Fri Nov 30 23:48:07 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* signal.c (ruby_signal): use SA_SIGINFO if available.
|
||||||
|
[ ruby-Patches-6418 ]
|
||||||
|
|
||||||
Fri Nov 30 22:52:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Fri Nov 30 22:52:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* signal.c (trap_signm): SIGVTALRM no longer used for green
|
* signal.c (trap_signm): SIGVTALRM no longer used for green
|
||||||
|
@ -472,7 +472,7 @@ VALUE rb_f_kill(int, VALUE*);
|
|||||||
void rb_gc_mark_trap_list(void);
|
void rb_gc_mark_trap_list(void);
|
||||||
#ifdef POSIX_SIGNAL
|
#ifdef POSIX_SIGNAL
|
||||||
#define posix_signal ruby_posix_signal
|
#define posix_signal ruby_posix_signal
|
||||||
void posix_signal(int, RETSIGTYPE (*)(int));
|
RETSIGTYPE (*posix_signal(int, RETSIGTYPE (*)(int)))(int);
|
||||||
#endif
|
#endif
|
||||||
void ruby_sig_finalize(void);
|
void ruby_sig_finalize(void);
|
||||||
void rb_trap_exit(void);
|
void rb_trap_exit(void);
|
||||||
|
@ -1668,6 +1668,10 @@ rb_f_abort(int argc, VALUE *argv)
|
|||||||
|
|
||||||
#if defined(sun)
|
#if defined(sun)
|
||||||
#define signal(a,b) sigset(a,b)
|
#define signal(a,b) sigset(a,b)
|
||||||
|
#else
|
||||||
|
# if defined(POSIX_SIGNAL)
|
||||||
|
# define signal(a,b) posix_signal(a,b)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
|
10
signal.c
10
signal.c
@ -414,9 +414,15 @@ ruby_signal(int signum, sighandler_t handler)
|
|||||||
|
|
||||||
rb_trap_accept_nativethreads[signum] = 0;
|
rb_trap_accept_nativethreads[signum] = 0;
|
||||||
|
|
||||||
sigact.sa_handler = handler;
|
|
||||||
sigemptyset(&sigact.sa_mask);
|
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;
|
sigact.sa_flags = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SA_NOCLDWAIT
|
#ifdef SA_NOCLDWAIT
|
||||||
if (signum == SIGCHLD && handler == SIG_IGN)
|
if (signum == SIGCHLD && handler == SIG_IGN)
|
||||||
sigact.sa_flags |= SA_NOCLDWAIT;
|
sigact.sa_flags |= SA_NOCLDWAIT;
|
||||||
@ -425,7 +431,7 @@ ruby_signal(int signum, sighandler_t handler)
|
|||||||
return old.sa_handler;
|
return old.sa_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
sighandler_t
|
||||||
posix_signal(int signum, sighandler_t handler)
|
posix_signal(int signum, sighandler_t handler)
|
||||||
{
|
{
|
||||||
ruby_signal(signum, handler);
|
ruby_signal(signum, handler);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user