From: Colin Patrick McCabe Date: Tue, 28 Dec 2010 01:29:57 +0000 (-0800) Subject: signals: Handle SIGILL, SIGBUS, SIGFPE. X-Git-Tag: v0.25~428 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=247b11b7b71e049480070fdfa01a57bb64dc4b76;p=ceph.git 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 --- diff --git a/src/config.cc b/src/config.cc index 68d8b63588d7..5c9a3165b38c 100644 --- a/src/config.cc +++ b/src/config.cc @@ -239,20 +239,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(); @@ -1303,8 +1293,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; }