aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Maxwell <greg@xiph.org>2015-04-28 17:00:50 -0700
committerWladimir J. van der Laan <laanwj@gmail.com>2015-05-12 16:38:04 +0200
commitda656068ec1f77591ae8ace78f283eb7cb74e46a (patch)
tree3a05e6850515af1b09ade588d68298da905618df
parent49e4d14f7587bca2785de0fd56c7dda2b0ffdfea (diff)
Avoid crash on start in TestBlockValidity with gen=1.
When the internal miner is enabled at the start of a new node, there is an near instant assert in TestBlockValidity because its attempting to mine a block before the top checkpoint. Also avoids a data race around vNodes. Github-Pull: #6123 Rebased-From: bba7c249296a9a2f444e1035fef8f8b593ba2aaf
-rw-r--r--src/miner.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/miner.cpp b/src/miner.cpp
index ad29431421..8efcdb9101 100644
--- a/src/miner.cpp
+++ b/src/miner.cpp
@@ -456,8 +456,16 @@ void static BitcoinMiner(CWallet *pwallet)
if (Params().MiningRequiresPeers()) {
// Busy-wait for the network to come online so we don't waste time mining
// on an obsolete chain. In regtest mode we expect to fly solo.
- while (vNodes.empty())
+ do {
+ bool fvNodesEmpty;
+ {
+ LOCK(cs_vNodes);
+ fvNodesEmpty = vNodes.empty();
+ }
+ if (!fvNodesEmpty && !IsInitialBlockDownload())
+ break;
MilliSleep(1000);
+ } while (true);
}
//
@@ -570,6 +578,11 @@ void static BitcoinMiner(CWallet *pwallet)
LogPrintf("BitcoinMiner terminated\n");
throw;
}
+ catch (const std::runtime_error &e)
+ {
+ LogPrintf("BitcoinMiner runtime error: %s\n", e.what());
+ return;
+ }
}
void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)