From 22e20614593b79786e4f1f6d45af817644c5c9e5 Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Mon, 27 Dec 2010 17:29:57 -0800 Subject: [PATCH] signals: Handle SIGILL, SIGBUS, SIGFPE. Print out a backtrace when we get SIGILL, SIGBUS, or SIGFPE. Fix a bug where we failed to install a SIGABRT handler. Signed-off-by: Colin McCabe --- src/config.cc | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/config.cc b/src/config.cc index 8b6cfd5ae2387..f3102142a274c 100644 --- a/src/config.cc +++ b/src/config.cc @@ -238,20 +238,10 @@ void sighup_handler(int signum) logger_reopen_all(); } -void sigsegv_handler(int signum) +void handle_fatal_signal(int signum) { - *_dout << "*** Caught signal (SEGV) ***" << std::endl; - BackTrace bt(0); - bt.print(*_dout); - _dout->flush(); - - // Use default handler to dump core - kill(getpid(), signum); -} - -void sigabrt_handler(int signum) -{ - *_dout << "*** Caught signal (ABRT) ***" << std::endl; + *_dout << "*** Caught signal (" << sys_siglist[signum] << ") ***" + << std::endl; BackTrace bt(0); bt.print(*_dout); _dout->flush(); @@ -1300,8 +1290,11 @@ void parse_config_options(std::vector& args) } install_sighandler(SIGHUP, sighup_handler, SA_RESTART); - install_sighandler(SIGSEGV, sigsegv_handler, SA_RESETHAND); - install_sighandler(SIGSEGV, sigabrt_handler, SA_RESETHAND); + install_sighandler(SIGSEGV, handle_fatal_signal, SA_RESETHAND); + install_sighandler(SIGABRT, handle_fatal_signal, SA_RESETHAND); + install_sighandler(SIGBUS, handle_fatal_signal, SA_RESETHAND); + install_sighandler(SIGILL, handle_fatal_signal, SA_RESETHAND); + install_sighandler(SIGFPE, handle_fatal_signal, SA_RESETHAND); args = nargs; } -- 2.39.5