From 3e56ac4b377a3f39f040556beffb7c58cc2baea4 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Tue, 5 Oct 2010 12:04:07 -0700 Subject: [PATCH] dump backtrace when getting sigsegv and sigabrt --- src/config.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/config.cc b/src/config.cc index c2c028e5c8f9c..0d9c8d802fb74 100644 --- a/src/config.cc +++ b/src/config.cc @@ -19,6 +19,7 @@ #include "common/Clock.h" #include "common/Logger.h" +#include "common/BackTrace.h" #include #include @@ -210,6 +211,25 @@ void sighup_handler(int signum) logger_reopen_all(); } +static void (*old_sigsegv_handler)(int); +static void (*old_sigabrt_handler)(int); + +void sigsegv_handler(int signum) +{ + BackTrace bt(0); + bt.print(*_dout); + + old_sigsegv_handler(signum); +} + +void sigabrt_handler(int signum) +{ + BackTrace bt(0); + bt.print(*_dout); + + old_sigabrt_handler(signum); +} + #define _STR(x) #x #define STRINGIFY(x) _STR(x) @@ -1177,6 +1197,8 @@ void parse_config_options(std::vector& args) } signal(SIGHUP, sighup_handler); + old_sigsegv_handler = signal(SIGSEGV, sigsegv_handler); + old_sigabrt_handler = signal(SIGABRT, sigabrt_handler); args = nargs; } -- 2.39.5