Skip to content

Commit 0d4bc8a

Browse files
committed
Remove signal and terminate handlers on shutdown
1 parent 6dabe6a commit 0d4bc8a

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

library/Crashlog.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,15 @@ void dfhack_crashlog_thread() {
130130
std::quick_exit(1);
131131
}
132132

133+
std::terminate_handler term_handler = nullptr;
134+
133135
const int desired_signals[3] = {SIGSEGV,SIGILL,SIGABRT};
134136
namespace DFHack {
135137
void dfhack_crashlog_init() {
136138
for (int signal : desired_signals) {
137139
std::signal(signal, dfhack_crashlog_handle_signal);
138140
}
139-
std::set_terminate(dfhack_crashlog_handle_terminate);
141+
term_handler = std::set_terminate(dfhack_crashlog_handle_terminate);
140142

141143
// https://sourceware.org/glibc/manual/latest/html_mono/libc.html#index-backtrace-1
142144
// backtrace is AsyncSignal-Unsafe due to dynamic loading of libgcc_s
@@ -147,6 +149,11 @@ namespace DFHack {
147149
}
148150

149151
void dfhack_crashlog_shutdown() {
152+
for (int signal : desired_signals) {
153+
std::signal(signal, SIG_DFL);
154+
}
155+
std::set_terminate(term_handler);
156+
150157
shutdown = true;
151158
flag_set(crashlog_ready);
152159
crashlog_thread.join();

0 commit comments

Comments
 (0)