NeoMutt
2025-12-11-1039-g550ac6
Teaching an old dog new tricks
DOXYGEN
Toggle main menu visibility
Loading...
Searching...
No Matches
signal2.h
Go to the documentation of this file.
1
22
23
#ifndef MUTT_MUTT_SIGNAL2_H
24
#define MUTT_MUTT_SIGNAL2_H
25
26
#include <signal.h>
27
#include <stdbool.h>
28
29
#ifdef USE_DEBUG_BACKTRACE
30
void
show_backtrace
(
void
);
31
#else
32
static
inline
void
show_backtrace
(
void
) {}
// LCOV_EXCL_LINE
33
#endif
34
35
extern
volatile
sig_atomic_t
SigInt
;
36
extern
volatile
sig_atomic_t
SigWinch
;
37
45
typedef
void (*
sig_handler_t
)(
int
sig);
46
47
extern
sig_handler_t
OldSegvHandler
;
48
49
void
assertion_dump
(
const
char
*file,
int
line,
const
char
*func,
const
char
*cond);
50
51
#ifndef NDEBUG
52
#if __GNUC__
53
#define ASSERT_STOP __builtin_trap()
54
#elif _MSC_VER
55
#define ASSERT_STOP __debugbreak()
56
#else
57
#define ASSERT_STOP (*(volatile int *) 0 = 0)
58
#endif
59
#define ASSERT(COND) \
60
do \
61
{ \
62
if (!(COND)) \
63
{ \
64
assertion_dump(__FILE__, __LINE__, __func__, #COND); \
65
ASSERT_STOP; \
66
} \
67
} while (false);
68
#else
69
#define ASSERT(COND) \
70
do \
71
{ \
72
if (COND) \
73
{ \
74
} \
75
} while (false);
76
#endif
77
78
void
mutt_sig_allow_interrupt
(
bool
allow);
79
void
mutt_sig_block
(
void
);
80
void
mutt_sig_block_system
(
void
);
81
void
mutt_sig_empty_handler
(
int
sig);
82
void
mutt_sig_exit_handler
(
int
sig);
83
void
mutt_sig_init
(
sig_handler_t
sig_fn,
sig_handler_t
exit_fn,
sig_handler_t
segv_fn);
84
void
mutt_sig_reset_child_signals
(
void
);
85
void
mutt_sig_unblock
(
void
);
86
void
mutt_sig_unblock_system
(
bool
restore);
87
88
#endif
/* MUTT_MUTT_SIGNAL2_H */
mutt_sig_init
void mutt_sig_init(sig_handler_t sig_fn, sig_handler_t exit_fn, sig_handler_t segv_fn)
Initialise the signal handling.
Definition
signal.c:163
assertion_dump
void assertion_dump(const char *file, int line, const char *func, const char *cond)
Dump some debugging info before we stop the program.
Definition
signal.c:361
mutt_sig_empty_handler
void mutt_sig_empty_handler(int sig)
Dummy signal handler.
Definition
signal.c:130
sig_handler_t
void(* sig_handler_t)(int sig)
Definition
signal2.h:45
mutt_sig_reset_child_signals
void mutt_sig_reset_child_signals(void)
Reset ignored signals back to the default.
Definition
signal.c:336
mutt_sig_block_system
void mutt_sig_block_system(void)
Block signals before calling exec().
Definition
signal.c:260
mutt_sig_block
void mutt_sig_block(void)
Block signals during critical operations.
Definition
signal.c:227
mutt_sig_unblock
void mutt_sig_unblock(void)
Restore previously blocked signals.
Definition
signal.c:245
mutt_sig_unblock_system
void mutt_sig_unblock_system(bool restore)
Restore previously blocked signals.
Definition
signal.c:284
show_backtrace
static void show_backtrace(void)
Definition
signal2.h:32
mutt_sig_allow_interrupt
void mutt_sig_allow_interrupt(bool allow)
Allow/disallow Ctrl-C (SIGINT).
Definition
signal.c:315
mutt_sig_exit_handler
void mutt_sig_exit_handler(int sig)
Notify the user and shutdown gracefully.
Definition
signal.c:138
SigWinch
volatile sig_atomic_t SigWinch
true after SIGWINCH is received
Definition
signal.c:69
SigInt
volatile sig_atomic_t SigInt
true after SIGINT is received
Definition
signal.c:68
OldSegvHandler
sig_handler_t OldSegvHandler
Keep the old SEGV handler, it could have been set by ASAN.
Definition
signal.c:66