From ee3dcf5075832ae3455747209c6943f999dc0ba2 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 10 Sep 2019 14:28:10 -0700 Subject: [PATCH] ircd::m::init::backfill: Additional worker terminator based on runlevel change. --- modules/m_init_backfill.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/m_init_backfill.cc b/modules/m_init_backfill.cc index fb6d6b191..545e754ab 100644 --- a/modules/m_init_backfill.cc +++ b/modules/m_init_backfill.cc @@ -19,6 +19,7 @@ struct ircd::m::init::backfill static void fini(); static void init(); + static run::changed worker_terminator; static std::unique_ptr worker_context; static conf::item enable; static conf::item pool_size; @@ -56,6 +57,14 @@ ircd::m::init::backfill::pool_size decltype(ircd::m::init::backfill::worker_context) ircd::m::init::backfill::worker_context; +decltype(ircd::m::init::backfill::worker_terminator) +ircd::m::init::backfill::worker_terminator{[] +(const auto &level) +{ + if(level == run::level::QUIT && worker_context) + worker_context->terminate(); +}}; + void ircd::m::init::backfill::init() { @@ -167,9 +176,6 @@ try dock.notify_one(); }}; - if(unlikely(run::level != run::level::RUN)) - return false; - handle_room(room_id); ctx::interruption_point();