|
|
|
@ -37,6 +37,7 @@
@@ -37,6 +37,7 @@
|
|
|
|
|
#include "validationinterface.h" |
|
|
|
|
#include "versionbits.h" |
|
|
|
|
|
|
|
|
|
#include <atomic> |
|
|
|
|
#include <sstream> |
|
|
|
|
|
|
|
|
|
#include <boost/algorithm/string/replace.hpp> |
|
|
|
@ -1577,18 +1578,24 @@ CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
@@ -1577,18 +1578,24 @@ CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
|
|
|
|
|
bool IsInitialBlockDownload() |
|
|
|
|
{ |
|
|
|
|
const CChainParams& chainParams = Params(); |
|
|
|
|
|
|
|
|
|
// Once this function has returned false, it must remain false.
|
|
|
|
|
static std::atomic<bool> latchToFalse{false}; |
|
|
|
|
// Optimization: pre-test latch before taking the lock.
|
|
|
|
|
if (latchToFalse.load(std::memory_order_relaxed)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
LOCK(cs_main); |
|
|
|
|
if (latchToFalse.load(std::memory_order_relaxed)) |
|
|
|
|
return false; |
|
|
|
|
if (fImporting || fReindex) |
|
|
|
|
return true; |
|
|
|
|
if (fCheckpointsEnabled && chainActive.Height() < Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints())) |
|
|
|
|
return true; |
|
|
|
|
static bool lockIBDState = false; |
|
|
|
|
if (lockIBDState) |
|
|
|
|
return false; |
|
|
|
|
bool state = (chainActive.Height() < pindexBestHeader->nHeight - 24 * 6 || |
|
|
|
|
std::max(chainActive.Tip()->GetBlockTime(), pindexBestHeader->GetBlockTime()) < GetTime() - nMaxTipAge); |
|
|
|
|
if (!state) |
|
|
|
|
lockIBDState = true; |
|
|
|
|
latchToFalse.store(true, std::memory_order_relaxed); |
|
|
|
|
return state; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|