mirror of
https://github.com/QuasarApp/backward-cpp.git
synced 2025-05-13 18:09:41 +00:00
Allow running sighandler logic as part of a cleanup chain
In our code, we need to take certain cleanup actions after receiving a SIGSEGV. This makes it difficult to integrate with backward, as our custom sighandler is overriden. A simple solution is to have backward-cpp expose the core sighandling logic as a public function, which we can simply call from within our code. This is not currently possible since sig_handler is private, and additionally raises the signal again at the end. This pull request makes the above possible. The alternative is to copy handleSignal into our own code, which is just ugly.
This commit is contained in:
parent
ed34891cb1
commit
d29afac746
20
backward.hpp
20
backward.hpp
@ -2017,14 +2017,7 @@ public:
|
||||
|
||||
bool loaded() const { return _loaded; }
|
||||
|
||||
private:
|
||||
details::handle<char*> _stack_content;
|
||||
bool _loaded;
|
||||
|
||||
#ifdef __GNUC__
|
||||
__attribute__((noreturn))
|
||||
#endif
|
||||
static void sig_handler(int, siginfo_t* info, void* _ctx) {
|
||||
static void handleSignal(int, siginfo_t* info, void* _ctx) {
|
||||
ucontext_t *uctx = (ucontext_t*) _ctx;
|
||||
|
||||
StackTrace st;
|
||||
@ -2055,6 +2048,17 @@ private:
|
||||
#if _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
|
||||
psiginfo(info, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
details::handle<char*> _stack_content;
|
||||
bool _loaded;
|
||||
|
||||
#ifdef __GNUC__
|
||||
__attribute__((noreturn))
|
||||
#endif
|
||||
static void sig_handler(int signo, siginfo_t* info, void* _ctx) {
|
||||
handleSignal(signo, info, _ctx);
|
||||
|
||||
// try to forward the signal.
|
||||
raise(info->si_signo);
|
||||
|
Loading…
x
Reference in New Issue
Block a user