Skip to content

Commit

Permalink
Fix fast-shutdown hang on ThreadImport+GenesisWait
Browse files Browse the repository at this point in the history
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.

Github-Pull: #12367
Rebased-From: 1c9394a
Tree-SHA512: fb0751ef32d2005520738bf3b0a0f41ae3f9314d700d2a85eb50f023e87e109ce806cdcdf4a08f49a4d9c1001e27df7f461d3fd52b1f5a57885260ce9375260f
  • Loading branch information
TheBlueMatt authored and laanwj committed Feb 8, 2018
1 parent da84760 commit 09fc859
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/init.cpp
Expand Up @@ -1645,12 +1645,19 @@ bool AppInitMain()
// Wait for genesis block to be processed
{
WaitableLock lock(cs_GenesisWait);
while (!fHaveGenesis) {
condvar_GenesisWait.wait(lock);
// We previously could hang here if StartShutdown() is called prior to
// 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);
}

if (ShutdownRequested()) {
return false;
}

// ********************************************************* Step 11: start node

int chain_active_height;
Expand Down

0 comments on commit 09fc859

Please sign in to comment.