27 lines
952 B
Diff
27 lines
952 B
Diff
|
---
|
||
|
sig.c | 6 ++++++
|
||
|
1 file changed, 6 insertions(+)
|
||
|
|
||
|
--- sig.c
|
||
|
+++ sig.c 2018-11-29 08:13:00.103944580 +0000
|
||
|
@@ -814,6 +814,8 @@ set_signal_handler (sig, handler)
|
||
|
if (sig == SIGCHLD)
|
||
|
act.sa_flags |= SA_RESTART; /* XXX */
|
||
|
#endif
|
||
|
+ if (handler == (trap_handler))
|
||
|
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
||
|
/* Let's see if we can keep SIGWINCH from interrupting interruptible system
|
||
|
calls, like open(2)/read(2)/write(2) */
|
||
|
#if defined (SIGWINCH)
|
||
|
@@ -826,6 +826,10 @@ set_signal_handler (sig, handler)
|
||
|
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);
|