mirror of
https://github.com/matrix-construct/construct
synced 2024-09-26 18:38:52 +02:00
ircd:Ⓜ️:init::backfill: Improve worker termination and release of context.
This commit is contained in:
parent
d16dca495f
commit
7d091f8d55
1 changed files with 19 additions and 17 deletions
|
@ -16,7 +16,7 @@ namespace ircd::m::init::backfill
|
||||||
|
|
||||||
extern size_t count, complete;
|
extern size_t count, complete;
|
||||||
extern ircd::run::changed handle_quit;
|
extern ircd::run::changed handle_quit;
|
||||||
extern std::unique_ptr<context> worker_context;
|
extern ctx::ctx *worker_context;
|
||||||
extern ctx::pool *worker_pool;
|
extern ctx::pool *worker_pool;
|
||||||
extern conf::item<seconds> delay;
|
extern conf::item<seconds> delay;
|
||||||
extern conf::item<seconds> gossip_timeout;
|
extern conf::item<seconds> gossip_timeout;
|
||||||
|
@ -100,11 +100,7 @@ ircd::m::init::backfill::handle_quit
|
||||||
{
|
{
|
||||||
run::level::QUIT, []
|
run::level::QUIT, []
|
||||||
{
|
{
|
||||||
if(worker_context)
|
fini();
|
||||||
worker_context->terminate();
|
|
||||||
|
|
||||||
if(worker_pool)
|
|
||||||
worker_pool->terminate();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,32 +118,38 @@ ircd::m::init::backfill::init()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(!worker_context);
|
ctx::context context
|
||||||
worker_context.reset(new context
|
|
||||||
{
|
{
|
||||||
"m.init.backfill",
|
"m.init.backfill",
|
||||||
512_KiB,
|
512_KiB,
|
||||||
&worker,
|
&worker,
|
||||||
context::POST
|
context::POST
|
||||||
});
|
};
|
||||||
|
|
||||||
|
// Detach into the worker_context ptr. When the worker finishes it
|
||||||
|
// will free itself.
|
||||||
|
assert(!worker_context);
|
||||||
|
worker_context = context.detach();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ircd::m::init::backfill::fini()
|
ircd::m::init::backfill::fini()
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
if(!worker_context)
|
if(worker_context)
|
||||||
return;
|
log::debug
|
||||||
|
{
|
||||||
log::debug
|
log, "Terminating worker context..."
|
||||||
{
|
};
|
||||||
log, "Terminating worker context..."
|
|
||||||
};
|
|
||||||
|
|
||||||
if(worker_pool)
|
if(worker_pool)
|
||||||
worker_pool->terminate();
|
worker_pool->terminate();
|
||||||
|
|
||||||
worker_context.reset(nullptr);
|
if(worker_context)
|
||||||
|
{
|
||||||
|
ctx::terminate(*worker_context);
|
||||||
|
worker_context = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue