Browse Source

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.

Github-Pull: #12367
Rebased-From: 1c9394ad477d0c1ca0ab1caa6024a7e70c125d15
Tree-SHA512: fb0751ef32d2005520738bf3b0a0f41ae3f9314d700d2a85eb50f023e87e109ce806cdcdf4a08f49a4d9c1001e27df7f461d3fd52b1f5a57885260ce9375260f
0.16
Matt Corallo 7 years ago committed by Wladimir J. van der Laan
parent
commit
09fc859ef0
No known key found for this signature in database
GPG Key ID: 1E4AED62986CD25D
  1. 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…
Cancel
Save