]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/main: move signal handler actions out of shutdown()
authorMatt Benjamin <mbenjamin@redhat.com>
Fri, 2 Sep 2022 21:54:45 +0000 (17:54 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Fri, 9 Sep 2022 15:18:41 +0000 (11:18 -0400)
AppMain::shutdown() had borrowed the unregister_async_signal_handler()
text from librgw, but of course, that's wrong.

Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/rgw_appmain.cc
src/rgw/rgw_lib.cc
src/rgw/rgw_main.cc
src/rgw/rgw_main.h

index 0d99df0c1c966c5b7c81ddce99e7d22da0df3ce9..66867636a110be7a25c43aab0c9c4b0160771362 100644 (file)
@@ -560,7 +560,7 @@ void rgw::AppMain::init_lua()
   }
 } /* init_lua */
 
-void rgw::AppMain::shutdown()
+void rgw::AppMain::shutdown(std::function<void(void)> 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;
index 4bc63e869e1b95106378832e4cc7bcc59536de9d..768c9b51ea4d580a93ac9a0c5534290b95930846 100644 (file)
@@ -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 <errno.h>
@@ -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() */
index 85061a28d6e96b3d3438791b0de9c3f056d3c386..c4cfb2ebdb33ff750293d75919f8e6f8458631b0 100644 (file)
@@ -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;
 
index 09b23250179d4faaa5bec21e8717017c2acfa5bd..3acd1198c7d24f383807828543ada755941c9b82 100644 (file)
@@ -82,7 +82,8 @@ public:
     : dpp(dpp)
     {}
 
-  void shutdown();
+  void shutdown(std::function<void(void)> finalize_async_signals
+              = []() { /* nada */});
 
   rgw::sal::Store* get_store() {
     return store;