summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-07-20 08:37:44 -0700
committerSage Weil <sage@inktank.com>2013-07-20 08:37:44 -0700
commit318f3df718bff735c09851178fa3398bc272dc67 (patch)
treef4c5577524afc0e4cd5e1df6e9f73d22f481a6dc
parent868b48634be46c74f8e26e6a1c2ebc2d2b3beb9a (diff)
downloadceph-318f3df718bff735c09851178fa3398bc272dc67.tar.gz
mds: install signal handlers after init
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/ceph_mds.cc19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/ceph_mds.cc b/src/ceph_mds.cc
index edb48bd96d8..9206312bc66 100644
--- a/src/ceph_mds.cc
+++ b/src/ceph_mds.cc
@@ -274,12 +274,6 @@ int main(int argc, const char **argv)
messenger->start();
- // 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_oneshot(SIGINT, handle_mds_signal);
- register_async_signal_handler_oneshot(SIGTERM, handle_mds_signal);
-
// start mds
mds = new MDS(g_conf->name.get_id().c_str(), messenger, &mc);
@@ -291,16 +285,23 @@ int main(int argc, const char **argv)
r = mds->init(shadow);
else
r = mds->init();
+ if (r < 0)
+ goto shutdown;
- if (r >= 0) {
- messenger->wait();
- }
+ // 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_oneshot(SIGINT, handle_mds_signal);
+ register_async_signal_handler_oneshot(SIGTERM, handle_mds_signal);
+
+ messenger->wait();
unregister_async_signal_handler(SIGHUP, sighup_handler);
unregister_async_signal_handler(SIGINT, handle_mds_signal);
unregister_async_signal_handler(SIGTERM, handle_mds_signal);
shutdown_async_signal_handler();
+ shutdown:
// yuck: grab the mds lock, so we can be sure that whoever in *mds
// called shutdown finishes what they were doing.
mds->mds_lock.Lock();