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);
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();