From: Venky Shankar Date: Mon, 1 Feb 2021 04:41:43 +0000 (-0500) Subject: cephfs-mirror: use preforker for daemonizing X-Git-Tag: v17.1.0~2889^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bb81fd3f9dcb676e7ae3b3a692cc67b921559a6e;p=ceph-ci.git cephfs-mirror: use preforker for daemonizing Signed-off-by: Venky Shankar --- diff --git a/src/tools/cephfs_mirror/main.cc b/src/tools/cephfs_mirror/main.cc index 2301cb7ef48..aceb57bdbb5 100644 --- a/src/tools/cephfs_mirror/main.cc +++ b/src/tools/cephfs_mirror/main.cc @@ -6,6 +6,7 @@ #include "common/debug.h" #include "common/errno.h" #include "common/async/context_pool.h" +#include "common/Preforker.h" #include "global/global_init.h" #include "global/signal_handler.h" #include "mon/MonClient.h" @@ -47,12 +48,32 @@ int main(int argc, const char **argv) { CODE_ENVIRONMENT_DAEMON, CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS); - if (g_conf()->daemonize) { - global_init_daemonize(g_ceph_context); + Preforker forker; + if (global_init_prefork(g_ceph_context) >= 0) { + std::string err; + int r = forker.prefork(err); + if (r < 0) { + cerr << err << std::endl; + return r; + } + if (forker.is_parent()) { + g_ceph_context->_log->start(); + if (forker.parent_wait(err) != 0) { + return -ENXIO; + } + return 0; + } + global_init_postfork_start(g_ceph_context); } common_init_finish(g_ceph_context); + bool daemonize = g_conf().get_val("daemonize"); + if (daemonize) { + global_init_postfork_finish(g_ceph_context); + forker.daemonize(); + } + init_async_signal_handler(); register_async_signal_handler_oneshot(SIGINT, handle_signal); register_async_signal_handler_oneshot(SIGTERM, handle_signal); @@ -95,5 +116,5 @@ cleanup_messenger: unregister_async_signal_handler(SIGTERM, handle_signal); shutdown_async_signal_handler(); - return r < 0 ? EXIT_SUCCESS : EXIT_FAILURE; + return forker.signal_exit(r); }