]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/common: do backtrace via boost::stackstrace and addr2line. 40915/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 19 Apr 2021 14:41:37 +0000 (14:41 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 19 Apr 2021 15:24:04 +0000 (15:24 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/common/fatal_signal.cc

index a03259a86820e7fe72d9be2a1f95088c7a175671..ed7b6a43f8d82a55718432d45f556677f970b582 100644 (file)
@@ -7,6 +7,8 @@
 #include <iostream>
 #include <string_view>
 
+#define BOOST_STACKTRACE_USE_ADDR2LINE
+#include <boost/stacktrace.hpp>
 #include <seastar/core/reactor.hh>
 
 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: