]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: do a clean shutdown on SIGINT/SIGTERM
authorSage Weil <sage.weil@dreamhost.com>
Sun, 12 Feb 2012 22:43:13 +0000 (14:43 -0800)
committerSage Weil <sage.weil@dreamhost.com>
Wed, 15 Feb 2012 05:03:53 +0000 (21:03 -0800)
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/ceph_mon.cc
src/mon/Monitor.cc

index 877fd60a20e64ca4b6e38108f4a9bcf9640bced9..5b937741f741e8e448232e51fef8c43a0b038a06 100644 (file)
@@ -396,8 +396,8 @@ int main(int argc, const char **argv)
   // set up signal handlers, now that we've daemonized/forked.
   init_async_signal_handler();
   register_async_signal_handler(SIGHUP, sighup_handler);
-  register_async_signal_handler(SIGINT, handle_mon_signal);
-  register_async_signal_handler(SIGTERM, handle_mon_signal);
+  register_async_signal_handler_oneshot(SIGINT, handle_mon_signal);
+  register_async_signal_handler_oneshot(SIGTERM, handle_mon_signal);
 
   uint64_t supported =
     CEPH_FEATURE_UID |
index 87e774908365edc87916c9f07940750336986eb1..d1532f31079560d21a2b90563b65b265c922e1a5 100644 (file)
@@ -219,10 +219,10 @@ void Monitor::do_admin_command(string command, ostream& ss)
 void Monitor::handle_signal(int signum)
 {
   assert(signum == SIGINT || signum == SIGTERM);
-  derr << "*** got signal " << sys_siglist[signum] << " ***" << dendl;
-
-  // FIXME
-  exit(1);
+  derr << "*** Got Signal " << sys_siglist[signum] << " ***" << dendl;
+  lock.Lock();
+  shutdown();
+  lock.Unlock();
 }
 
 void Monitor::init()