]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
signals: Handle SIGILL, SIGBUS, SIGFPE.
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 28 Dec 2010 01:29:57 +0000 (17:29 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 28 Dec 2010 01:32:37 +0000 (17:32 -0800)
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 <colinm@hq.newdream.net>
src/config.cc

index 68d8b63588d77247a2e5b317ce4fa2442ac6c752..5c9a3165b38cd9fc6c1079acb7440b891372740b 100644 (file)
@@ -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<const char*>& 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;
 }