22 lines
869 B
Diff
22 lines
869 B
Diff
--- sig.c
|
|
+++ sig.c 2014-04-17 10:02:57.078235890 +0000
|
|
@@ -722,10 +722,18 @@ set_signal_handler (sig, handler)
|
|
if (sig == SIGCHLD)
|
|
act.sa_flags |= SA_RESTART; /* XXX */
|
|
#endif
|
|
+ if (sig != SIGALRM && handler != (termsig_sighandler))
|
|
+ act.sa_flags |= SA_RESTART; /* XXX */
|
|
+ if (handler == (trap_handler))
|
|
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
|
/* If we're installing a SIGTERM handler for interactive shells, we want
|
|
it to be as close to SIG_IGN as possible. */
|
|
if (sig == SIGTERM && handler == sigterm_sighandler)
|
|
act.sa_flags |= SA_RESTART; /* XXX */
|
|
+ else if (handler == (termsig_sighandler))
|
|
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
|
+ if (sig == SIGTSTP || sig == SIGTTOU || sig == SIGTTIN || sig == SIGCONT)
|
|
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
|
|
|
sigemptyset (&act.sa_mask);
|
|
sigemptyset (&oact.sa_mask);
|