NeoMutt  2025-01-09-117-gace867
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
signal2.h
Go to the documentation of this file.
1
23#ifndef MUTT_MUTT_SIGNAL2_H
24#define MUTT_MUTT_SIGNAL2_H
25
26#include "config.h"
27#include <signal.h>
28#include <stdbool.h>
29
30#ifdef USE_DEBUG_BACKTRACE
31void show_backtrace(void);
32#else
33static inline void show_backtrace(void) {} // LCOV_EXCL_LINE
34#endif
35
36extern volatile sig_atomic_t SigInt;
37extern volatile sig_atomic_t SigWinch;
38
46typedef void (*sig_handler_t)(int sig);
47
49
50void assertion_dump(const char *file, int line, const char *func, const char *cond);
51
52#ifndef NDEBUG
53#if __GNUC__
54#define ASSERT_STOP __builtin_trap()
55#elif _MSC_VER
56#define ASSERT_STOP __debugbreak()
57#else
58#define ASSERT_STOP (*(volatile int *) 0 = 0)
59#endif
60#define ASSERT(COND) \
61 do \
62 { \
63 if (!(COND)) \
64 { \
65 assertion_dump(__FILE__, __LINE__, __func__, #COND); \
66 ASSERT_STOP; \
67 } \
68 } while (false);
69#else
70#define ASSERT(COND) \
71 do \
72 { \
73 if (COND) \
74 { \
75 } \
76 } while (false);
77#endif
78
79void mutt_sig_allow_interrupt(bool allow);
80void mutt_sig_block(void);
81void mutt_sig_block_system(void);
82void mutt_sig_empty_handler(int sig);
83void mutt_sig_exit_handler(int sig);
84void mutt_sig_init(sig_handler_t sig_fn, sig_handler_t exit_fn, sig_handler_t segv_fn);
86void mutt_sig_unblock(void);
87void mutt_sig_unblock_system(bool restore);
88
89#endif /* MUTT_MUTT_SIGNAL2_H */
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:164
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:362
volatile sig_atomic_t SigWinch
true after SIGWINCH is received
Definition: signal.c:70
void mutt_sig_empty_handler(int sig)
Dummy signal handler.
Definition: signal.c:131
void(* sig_handler_t)(int sig)
Definition: signal2.h:46
void mutt_sig_reset_child_signals(void)
Reset ignored signals back to the default.
Definition: signal.c:337
volatile sig_atomic_t SigInt
true after SIGINT is received
Definition: signal.c:69
sig_handler_t OldSegvHandler
Old SEGV handler, it could have been set by ASAN.
Definition: signal.c:67
void mutt_sig_block_system(void)
Block signals before calling exec()
Definition: signal.c:261
void mutt_sig_block(void)
Block signals during critical operations.
Definition: signal.c:228
void mutt_sig_unblock(void)
Restore previously blocked signals.
Definition: signal.c:246
void mutt_sig_unblock_system(bool restore)
Restore previously blocked signals.
Definition: signal.c:285
static void show_backtrace(void)
Definition: signal2.h:33
void mutt_sig_allow_interrupt(bool allow)
Allow/disallow Ctrl-C (SIGINT)
Definition: signal.c:316
void mutt_sig_exit_handler(int sig)
Notify the user and shutdown gracefully.
Definition: signal.c:139