83#ifdef HAVE_DECL_SYS_SIGLIST
84 printf(
_(
"Caught signal %d (%s) ... Exiting\n"), sig, sys_siglist[sig]);
85#elif (defined(__sun__) && defined(__svr4__))
86 printf(
_(
"Caught signal %d (%s) ... Exiting\n"), sig, _sys_siglist[sig]);
87#elif (defined(__alpha) && defined(__osf__))
88 printf(
_(
"Caught signal %d (%s) ... Exiting\n"), sig, __sys_siglist[sig]);
90 printf(
_(
"Caught signal %d ... Exiting\n"), sig);
115 struct sigaction act = { 0 };
117 sigemptyset(&act.sa_mask);
119 act.sa_handler = SIG_IGN;
120 sigaction(SIGPIPE, &act, NULL);
123 sigaction(SIGSEGV, &act, NULL);
126 sigaction(SIGTERM, &act, NULL);
127 sigaction(SIGHUP, &act, NULL);
128 sigaction(SIGQUIT, &act, NULL);
131 sigaddset(&act.sa_mask, SIGTSTP);
138 sigaction(SIGALRM, &act, NULL);
142 act.sa_flags = SA_RESTART;
145 sigaction(SIGCONT, &act, NULL);
146 sigaction(SIGTSTP, &act, NULL);
147 sigaction(SIGINT, &act, NULL);
148 sigaction(SIGWINCH, &act, NULL);
154 sigemptyset(&act.sa_mask);
156 act.sa_flags |= SA_NOCLDSTOP;
157 sigaction(SIGCHLD, &act, NULL);
172 sigaddset(&
Sigset, SIGTERM);
173 sigaddset(&
Sigset, SIGHUP);
174 sigaddset(&
Sigset, SIGTSTP);
175 sigaddset(&
Sigset, SIGINT);
176 sigaddset(&
Sigset, SIGWINCH);
177 sigprocmask(SIG_BLOCK, &
Sigset, 0);
189 sigprocmask(SIG_UNBLOCK, &
Sigset, 0);
204 struct sigaction sa = { 0 };
207 sa.sa_handler = SIG_IGN;
209 sigemptyset(&sa.sa_mask);
228 sigprocmask(SIG_UNBLOCK, &
SigsetSys, NULL);
236 struct sigaction sa = { 0 };
238 sa.sa_handler = SIG_DFL;
239 sigemptyset(&sa.sa_mask);
241 sigaction(SIGQUIT, &sa, NULL);
242 sigaction(SIGINT, &sa, NULL);
256 struct sigaction sa = { 0 };
261 sa.sa_flags |= SA_RESTART;
263 sigaction(SIGINT, &sa, NULL);
277 struct sigaction sa = { 0 };
279 sa.sa_handler = SIG_DFL;
281 sigemptyset(&sa.sa_mask);
284 sigaction(SIGPIPE, &sa, NULL);
288 sigaction(SIGTERM, &sa, NULL);
289 sigaction(SIGTSTP, &sa, NULL);
290 sigaction(SIGCONT, &sa, NULL);
void(* sig_handler_t)(int sig)
void mutt_sig_init(sig_handler_t sig_fn, sig_handler_t exit_fn, sig_handler_t segv_fn)
Initialise the signal handling.
static bool SysSignalsBlocked
true when system signals are blocked, e.g.
static sig_handler_t ExitHandler
Function to handle SIGTERM (15), SIGHUP (1), SIGQUIT (3) signals.
volatile sig_atomic_t SigWinch
true after SIGWINCH is received
static sig_handler_t SigHandler
Function to handle other signals, e.g. SIGINT (2)
static struct sigaction SysOldQuit
Backup of SIGQUIT handler, when mutt_sig_block_system() is called.
void mutt_sig_empty_handler(int sig)
Dummy signal handler.
static sigset_t Sigset
A set of signals used by mutt_sig_block(), mutt_sig_unblock()
void mutt_sig_reset_child_signals(void)
Reset ignored signals back to the default.
volatile sig_atomic_t SigInt
true after SIGINT is received
void mutt_sig_block_system(void)
Block signals before calling exec()
void mutt_sig_block(void)
Block signals during critical operations.
void mutt_sig_unblock(void)
Restore previously blocked signals.
static bool SignalsBlocked
true when signals are blocked, e.g.
static sig_handler_t SegvHandler
Function to handle SIGSEGV (11) signals.
static sigset_t SigsetSys
A set of signals used by mutt_sig_block_system(), mutt_sig_unblock_system()
void mutt_sig_unblock_system(bool restore)
Restore previously blocked signals.
static struct sigaction SysOldInt
Backup of SIGINT handler, when mutt_sig_block_system() is called.
void mutt_sig_allow_interrupt(bool allow)
Allow/disallow Ctrl-C (SIGINT)
void mutt_sig_exit_handler(int sig)
Notify the user and shutdown gracefully.