diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2023-05-15 23:14:51 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-15 23:14:51 +0900 |
commit | ab7bb38aca0d2b5c2b81142a8e67fbff0f1a4a8a (patch) | |
tree | 802485815849e6ac13711f7dd62e91ff951c9426 /signal.c | |
parent | bab9966b7a94a63381d53ad2a8a9a53fcddf6148 (diff) |
Remove explicit SIGCHLD handling. (#7816)
* Remove unused SIGCHLD handling.
* Remove unused `init_sigchld`.
* Remove unnecessary `#define RUBY_SIGCHLD (0)`.
* Remove unused `SIGCHLD_LOSSY`.
Notes
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 82 |
1 files changed, 6 insertions, 76 deletions
@@ -133,7 +133,7 @@ static const struct signals { #ifdef SIGCONT {"CONT", SIGCONT}, #endif -#if RUBY_SIGCHLD +#ifdef RUBY_SIGCHLD {"CHLD", RUBY_SIGCHLD }, {"CLD", RUBY_SIGCHLD }, #endif @@ -509,9 +509,6 @@ static struct { rb_atomic_t cnt[RUBY_NSIG]; rb_atomic_t size; } signal_buff; -#if RUBY_SIGCHLD -volatile unsigned int ruby_nocldwait; -#endif #define sighandler_t ruby_sighandler_t @@ -609,27 +606,6 @@ ruby_signal(int signum, sighandler_t handler) #endif switch (signum) { -#if RUBY_SIGCHLD - case RUBY_SIGCHLD: - if (handler == SIG_IGN) { - ruby_nocldwait = 1; -# ifdef USE_SIGALTSTACK - if (sigact.sa_flags & SA_SIGINFO) { - sigact.sa_sigaction = (ruby_sigaction_t*)sighandler; - } - else { - sigact.sa_handler = sighandler; - } -# else - sigact.sa_handler = handler; - sigact.sa_flags = 0; -# endif - } - else { - ruby_nocldwait = 0; - } - break; -#endif #if defined(SA_ONSTACK) && defined(USE_SIGALTSTACK) case SIGSEGV: #ifdef SIGBUS @@ -708,35 +684,14 @@ signal_enque(int sig) ATOMIC_INC(signal_buff.size); } -#if RUBY_SIGCHLD -static rb_atomic_t sigchld_hit; -/* destructive getter than simple predicate */ -# define GET_SIGCHLD_HIT() ATOMIC_EXCHANGE(sigchld_hit, 0) -#else -# define GET_SIGCHLD_HIT() 0 -#endif - static void sighandler(int sig) { int old_errnum = errno; - /* the VM always needs to handle SIGCHLD for rb_waitpid */ - if (sig == RUBY_SIGCHLD) { -#if RUBY_SIGCHLD - rb_vm_t *vm = GET_VM(); - ATOMIC_EXCHANGE(sigchld_hit, 1); - - /* avoid spurious wakeup in main thread if and only if nobody uses trap(:CHLD) */ - if (vm && ACCESS_ONCE(VALUE, vm->trap_list.cmd[sig])) { - signal_enque(sig); - } -#endif - } - else { - signal_enque(sig); - } + signal_enque(sig); rb_thread_wakeup_timer_thread(sig); + #if !defined(BSD_SIGNAL) && !defined(POSIX_SIGNAL) ruby_signal(sig, sighandler); #endif @@ -1153,9 +1108,6 @@ default_handler(int sig) #ifdef SIGUSR2 case SIGUSR2: #endif -#if RUBY_SIGCHLD - case RUBY_SIGCHLD: -#endif func = sighandler; break; #ifdef SIGBUS @@ -1221,9 +1173,6 @@ trap_handler(VALUE *cmd, int sig) break; case 14: if (memcmp(cptr, "SYSTEM_DEFAULT", 14) == 0) { - if (sig == RUBY_SIGCHLD) { - goto sig_dfl; - } func = SIG_DFL; *cmd = 0; } @@ -1441,6 +1390,7 @@ sig_list(VALUE _) if (reserved_signal_p(signum)) rb_bug(failed); \ perror(failed); \ } while (0) + static int install_sighandler_core(int signum, sighandler_t handler, sighandler_t *old_handler) { @@ -1465,25 +1415,6 @@ install_sighandler_core(int signum, sighandler_t handler, sighandler_t *old_hand # define force_install_sighandler(signum, handler, old_handler) \ INSTALL_SIGHANDLER(install_sighandler_core(signum, handler, old_handler), #signum, signum) -#if RUBY_SIGCHLD -static int -init_sigchld(int sig) -{ - sighandler_t oldfunc; - sighandler_t func = sighandler; - - oldfunc = ruby_signal(sig, SIG_DFL); - if (oldfunc == SIG_ERR) return -1; - ruby_signal(sig, func); - ACCESS_ONCE(VALUE, GET_VM()->trap_list.cmd[sig]) = 0; - - return 0; -} - -# define init_sigchld(signum) \ - INSTALL_SIGHANDLER(init_sigchld(signum), #signum, signum) -#endif - void ruby_sig_finalize(void) { @@ -1495,7 +1426,6 @@ ruby_sig_finalize(void) } } - int ruby_enable_coredump = 0; /* @@ -1592,8 +1522,8 @@ Init_signal(void) install_sighandler(SIGSYS, sig_do_nothing); #endif -#if RUBY_SIGCHLD - init_sigchld(RUBY_SIGCHLD); +#ifdef RUBY_SIGCHLD + install_sighandler(RUBY_SIGCHLD, sighandler); #endif rb_enable_interrupt(); |