#include <iostream>
#include <string_view>
+#define BOOST_STACKTRACE_USE_ADDR2LINE
+#include <boost/stacktrace.hpp>
#include <seastar/core/reactor.hh>
FatalSignal::FatalSignal()
{
struct sigaction sa;
sa.sa_sigaction = [](int sig, siginfo_t *info, void *p) {
- static std::atomic_bool handled = false;
- if (handled.exchange(true)) {
+ if (static std::atomic_bool handled{false}; handled.exchange(true)) {
return;
}
FatalSignal::signaled(sig);
sigfillset(&sa.sa_mask);
sa.sa_flags = SA_SIGINFO | SA_RESTART;
if constexpr (SigNum == SIGSEGV) {
- sa.sa_flags |= SA_ONSTACK;
+ sa.sa_flags |= SA_ONSTACK;
}
[[maybe_unused]] auto r = ::sigaction(SigNum, &sa, nullptr);
assert(r);
std::cerr << " on shard " << seastar::this_shard_id();
}
std::cerr << ".\nBacktrace:\n";
-#if 0
- std::cerr << symbolized::current_backtrace_tasklocal();
-#endif
+ std::cerr << boost::stacktrace::stacktrace();
std::cerr << std::flush;
// TODO: dump crash related meta data to $crash_dir
// see handle_fatal_signal()
}
-void FatalSignal::signaled(int signum)
+void FatalSignal::signaled(const int signum)
{
switch (signum) {
case SIGSEGV: