From 3904adfbc26c677064a121fcfda01d7b42e9a314 Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Fri, 2 Sep 2022 17:54:45 -0400 Subject: [PATCH] rgw/main: move signal handler actions out of shutdown() AppMain::shutdown() had borrowed the unregister_async_signal_handler() text from librgw, but of course, that's wrong. Signed-off-by: Matt Benjamin --- src/rgw/rgw_appmain.cc | 7 ++----- src/rgw/rgw_lib.cc | 14 ++++++++------ src/rgw/rgw_main.cc | 15 +++++++++------ src/rgw/rgw_main.h | 3 ++- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/rgw/rgw_appmain.cc b/src/rgw/rgw_appmain.cc index 0d99df0c1c9..66867636a11 100644 --- a/src/rgw/rgw_appmain.cc +++ b/src/rgw/rgw_appmain.cc @@ -560,7 +560,7 @@ void rgw::AppMain::init_lua() } } /* init_lua */ -void rgw::AppMain::shutdown() +void rgw::AppMain::shutdown(std::function finalize_async_signals) { if (store->get_name() == "rados") { reloader.reset(); // stop the realm reloader @@ -580,10 +580,7 @@ void rgw::AppMain::shutdown() } ldh.reset(nullptr); // deletes - - unregister_async_signal_handler(SIGUSR1, rgw::signal::handle_sigterm); - shutdown_async_signal_handler(); - + finalize_async_signals(); // callback rgw_log_usage_finalize(); delete olog; diff --git a/src/rgw/rgw_lib.cc b/src/rgw/rgw_lib.cc index 4bc63e869e1..768c9b51ea4 100644 --- a/src/rgw/rgw_lib.cc +++ b/src/rgw/rgw_lib.cc @@ -39,6 +39,7 @@ #include "rgw_lib.h" #include "rgw_lib_frontend.h" #include "rgw_perf_counters.h" +#include "rgw_signal.h" #include "rgw_main.h" #include @@ -54,11 +55,6 @@ namespace rgw { RGWLib* g_rgwlib = nullptr; - static void handle_sigterm(int signum) - { - dout(20) << __func__ << " SIGUSR1 ignored" << dendl; - } - class C_InitTimeout : public Context { public: C_InitTimeout() {} @@ -536,7 +532,13 @@ namespace rgw { int RGWLib::stop() { derr << "shutting down" << dendl; - main.shutdown(); + + const auto finalize_async_signals = []() { + unregister_async_signal_handler(SIGUSR1, rgw::signal::handle_sigterm); + shutdown_async_signal_handler(); + }; + + main.shutdown(finalize_async_signals); return 0; } /* RGWLib::stop() */ diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc index 85061a28d6e..c4cfb2ebdb3 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -168,13 +168,16 @@ int main(int argc, char *argv[]) rgw::signal::wait_shutdown(); derr << "shutting down" << dendl; - main.shutdown(); - unregister_async_signal_handler(SIGHUP, rgw::signal::sighup_handler); - unregister_async_signal_handler(SIGTERM, rgw::signal::handle_sigterm); - unregister_async_signal_handler(SIGINT, rgw::signal::handle_sigterm); - unregister_async_signal_handler(SIGUSR1, rgw::signal::handle_sigterm); - shutdown_async_signal_handler(); + const auto finalize_async_signals = []() { + unregister_async_signal_handler(SIGHUP, rgw::signal::sighup_handler); + unregister_async_signal_handler(SIGTERM, rgw::signal::handle_sigterm); + unregister_async_signal_handler(SIGINT, rgw::signal::handle_sigterm); + unregister_async_signal_handler(SIGUSR1, rgw::signal::handle_sigterm); + shutdown_async_signal_handler(); + }; + + main.shutdown(finalize_async_signals); dout(1) << "final shutdown" << dendl; diff --git a/src/rgw/rgw_main.h b/src/rgw/rgw_main.h index 09b23250179..3acd1198c7d 100644 --- a/src/rgw/rgw_main.h +++ b/src/rgw/rgw_main.h @@ -82,7 +82,8 @@ public: : dpp(dpp) {} - void shutdown(); + void shutdown(std::function finalize_async_signals + = []() { /* nada */}); rgw::sal::Store* get_store() { return store; -- 2.39.5