NeoMutt  2023-11-03-85-g512e01
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
Signal Handling API

Prototype for a Signal Handler function. More...

Functions

static void curses_signal_handler (int sig)
 Catch signals and relay the info to the main program - Implements sig_handler_t -.
 
static void curses_exit_handler (int sig)
 Notify the user and shutdown gracefully - Implements sig_handler_t -.
 
static void curses_segv_handler (int sig)
 Catch a segfault and print a backtrace - Implements sig_handler_t -.
 

Detailed Description

Prototype for a Signal Handler function.

Parameters
sigSignal number, e.g. SIGINT

Function Documentation

◆ curses_signal_handler()

static void curses_signal_handler ( int  sig)
static

Catch signals and relay the info to the main program - Implements sig_handler_t -.

Parameters
sigSignal number, e.g. SIGINT

Definition at line 52 of file mutt_signal.c.

53{
54 int save_errno = errno;
55 enum MuttCursorState old_cursor = MUTT_CURSOR_VISIBLE;
56
57 switch (sig)
58 {
59 case SIGTSTP: /* user requested a suspend */
60 {
61 const bool c_suspend = cs_subset_bool(NeoMutt->sub, "suspend");
62 if (!c_suspend)
63 break;
64 IsEndwin = isendwin();
66 if (!IsEndwin)
67 endwin();
68 kill(0, SIGSTOP);
69 }
71
72 case SIGCONT:
73 if (!IsEndwin)
74 refresh();
75 mutt_curses_set_cursor(old_cursor);
76 /* We don't receive SIGWINCH when suspended; however, no harm is done by
77 * just assuming we received one, and triggering the 'resize' anyway. */
78 SigWinch = true;
79 break;
80
81 case SIGWINCH:
82 SigWinch = true;
83 break;
84
85 case SIGINT:
86 SigInt = true;
87 break;
88 }
89 errno = save_errno;
90}
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:48
SIG_ATOMIC_VOLATILE_T SigWinch
true after SIGWINCH is received
Definition: globals.c:60
SIG_ATOMIC_VOLATILE_T SigInt
true after SIGINT is received
Definition: globals.c:59
#define FALLTHROUGH
Definition: lib.h:111
enum MuttCursorState mutt_curses_set_cursor(enum MuttCursorState state)
Set the cursor state.
Definition: mutt_curses.c:96
MuttCursorState
Cursor states for mutt_curses_set_cursor()
Definition: mutt_curses.h:58
@ MUTT_CURSOR_VISIBLE
Display a normal cursor.
Definition: mutt_curses.h:60
static int IsEndwin
Ncurses function isendwin() has been called.
Definition: mutt_signal.c:46
Container for Accounts, Notifications.
Definition: neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:45
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ curses_exit_handler()

static void curses_exit_handler ( int  sig)
static

Notify the user and shutdown gracefully - Implements sig_handler_t -.

Parameters
sigSignal number, e.g. SIGTERM

Definition at line 96 of file mutt_signal.c.

97{
99 endwin(); /* just to be safe */
101 mutt_sig_exit_handler(sig); /* DOES NOT RETURN */
102}
void mutt_temp_attachments_cleanup(void)
Delete all temporary attachments.
Definition: mutt_attach.c:1308
void mutt_sig_exit_handler(int sig)
Notify the user and shutdown gracefully.
Definition: signal.c:78
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ curses_segv_handler()

static void curses_segv_handler ( int  sig)
static

Catch a segfault and print a backtrace - Implements sig_handler_t -.

Parameters
sigSignal number, e.g. SIGSEGV

Definition at line 108 of file mutt_signal.c.

109{
111 endwin(); /* just to be safe */
112#ifdef USE_DEBUG_BACKTRACE
114#endif
115#ifdef USE_DEBUG_GRAPHVIZ
116 dump_graphviz("segfault", NULL);
117#endif
118
119 struct sigaction act = { 0 };
120 sigemptyset(&act.sa_mask);
121 act.sa_flags = 0;
122 act.sa_handler = SIG_DFL;
123 sigaction(sig, &act, NULL);
124 // Re-raise the signal to give outside handlers a chance to deal with it
125 raise(sig);
126}
void show_backtrace(void)
Log the program's call stack.
Definition: backtrace.c:39
void dump_graphviz(const char *title, struct MailboxView *mv)
Definition: graphviz.c:879
+ Here is the call graph for this function:
+ Here is the caller graph for this function: