}
} /* 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
}
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;
#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>
RGWLib* g_rgwlib = nullptr;
- static void handle_sigterm(int signum)
- {
- dout(20) << __func__ << " SIGUSR1 ignored" << dendl;
- }
-
class C_InitTimeout : public Context {
public:
C_InitTimeout() {}
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() */
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;
: dpp(dpp)
{}
- void shutdown();
+ void shutdown(std::function<void(void)> finalize_async_signals
+ = []() { /* nada */});
rgw::sal::Store* get_store() {
return store;