mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-19 13:27:35 +02:00
Move scheduler/threadGroup into common-init instead of per-app
This resolves #12229 which pointed out a shutdown deadlock due to scheduler/checkqueue having been shut down while network message processing is still running.
This commit is contained in:
parent
6970b30c6f
commit
082a61c69d
4 changed files with 22 additions and 27 deletions
18
src/init.cpp
18
src/init.cpp
|
|
@ -155,7 +155,10 @@ public:
|
|||
static std::unique_ptr<CCoinsViewErrorCatcher> pcoinscatcher;
|
||||
static std::unique_ptr<ECCVerifyHandle> globalVerifyHandle;
|
||||
|
||||
void Interrupt(boost::thread_group& threadGroup)
|
||||
static boost::thread_group threadGroup;
|
||||
static CScheduler scheduler;
|
||||
|
||||
void Interrupt()
|
||||
{
|
||||
InterruptHTTPServer();
|
||||
InterruptHTTPRPC();
|
||||
|
|
@ -164,7 +167,6 @@ void Interrupt(boost::thread_group& threadGroup)
|
|||
InterruptTorControl();
|
||||
if (g_connman)
|
||||
g_connman->Interrupt();
|
||||
threadGroup.interrupt_all();
|
||||
}
|
||||
|
||||
void Shutdown()
|
||||
|
|
@ -199,6 +201,12 @@ void Shutdown()
|
|||
g_connman.reset();
|
||||
|
||||
StopTorControl();
|
||||
|
||||
// After everything has been shut down, but before things get flushed, stop the
|
||||
// CScheduler/checkqueue threadGroup
|
||||
threadGroup.interrupt_all();
|
||||
threadGroup.join_all();
|
||||
|
||||
if (fDumpMempoolLater && gArgs.GetArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) {
|
||||
DumpMempool();
|
||||
}
|
||||
|
|
@ -705,7 +713,7 @@ bool InitSanityCheck(void)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool AppInitServers(boost::thread_group& threadGroup)
|
||||
bool AppInitServers()
|
||||
{
|
||||
RPCServer::OnStarted(&OnRPCStarted);
|
||||
RPCServer::OnStopped(&OnRPCStopped);
|
||||
|
|
@ -1184,7 +1192,7 @@ bool AppInitLockDataDirectory()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
bool AppInitMain()
|
||||
{
|
||||
const CChainParams& chainparams = Params();
|
||||
// ********************************************************* Step 4a: application initialization
|
||||
|
|
@ -1251,7 +1259,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||
if (gArgs.GetBoolArg("-server", false))
|
||||
{
|
||||
uiInterface.InitMessage.connect(SetRPCWarmupStatus);
|
||||
if (!AppInitServers(threadGroup))
|
||||
if (!AppInitServers())
|
||||
return InitError(_("Unable to start HTTP server. See debug log for details."));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue