From: Radoslaw Zarzynski Date: Mon, 19 Apr 2021 14:41:37 +0000 (+0000) Subject: crimson/common: do backtrace via boost::stackstrace and addr2line. X-Git-Tag: v17.1.0~2192^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d3dcf510c35228a525311732fa5f7385c4a736ba;p=ceph.git crimson/common: do backtrace via boost::stackstrace and addr2line. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/common/fatal_signal.cc b/src/crimson/common/fatal_signal.cc index a03259a86820..ed7b6a43f8d8 100644 --- a/src/crimson/common/fatal_signal.cc +++ b/src/crimson/common/fatal_signal.cc @@ -7,6 +7,8 @@ #include #include +#define BOOST_STACKTRACE_USE_ADDR2LINE +#include #include FatalSignal::FatalSignal() @@ -32,8 +34,7 @@ void FatalSignal::install_oneshot_signal_handler() { 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); @@ -42,7 +43,7 @@ void FatalSignal::install_oneshot_signal_handler() 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); @@ -55,15 +56,13 @@ static void print_with_backtrace(std::string_view cause) { 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: