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();