mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
Fix fast-shutdown hang on ThreadImport+GenesisWait
If the user somehow manages to get into ShutdownRequested before ThreadImport gets to ActivateBestChain() we may hang waiting on condvar_GenesisWait forever. A simple wait_for and ShutdownRequested resolves this case.
This commit is contained in:
parent
1462bde767
commit
1c9394ad47
11
src/init.cpp
11
src/init.cpp
@ -1645,12 +1645,19 @@ bool AppInitMain()
|
|||||||
// Wait for genesis block to be processed
|
// Wait for genesis block to be processed
|
||||||
{
|
{
|
||||||
WaitableLock lock(cs_GenesisWait);
|
WaitableLock lock(cs_GenesisWait);
|
||||||
while (!fHaveGenesis) {
|
// We previously could hang here if StartShutdown() is called prior to
|
||||||
condvar_GenesisWait.wait(lock);
|
// ThreadImport getting started, so instead we just wait on a timer to
|
||||||
|
// check ShutdownRequested() regularly.
|
||||||
|
while (!fHaveGenesis && !ShutdownRequested()) {
|
||||||
|
condvar_GenesisWait.wait_for(lock, std::chrono::milliseconds(500));
|
||||||
}
|
}
|
||||||
uiInterface.NotifyBlockTip.disconnect(BlockNotifyGenesisWait);
|
uiInterface.NotifyBlockTip.disconnect(BlockNotifyGenesisWait);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ShutdownRequested()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// ********************************************************* Step 11: start node
|
// ********************************************************* Step 11: start node
|
||||||
|
|
||||||
int chain_active_height;
|
int chain_active_height;
|
||||||
|
Loading…
Reference in New Issue
Block a user