diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 55d404d91..5a7c998af 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -892,7 +892,7 @@ void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CB const int nNewHeight = pindexNew->nHeight; connman->SetBestHeight(nNewHeight); - g_initial_block_download_completed = !fInitialDownload; + SetServiceFlagsIBDCache(!fInitialDownload); if (!fInitialDownload) { // Find the hashes of all blocks that weren't previously in the best chain. std::vector vHashes; diff --git a/src/protocol.cpp b/src/protocol.cpp index ea78ab685..2ec26fbd3 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -12,7 +12,7 @@ # include #endif -std::atomic g_initial_block_download_completed(false); +static std::atomic g_initial_block_download_completed(false); namespace NetMsgType { const char *VERSION="version"; @@ -129,6 +129,17 @@ bool CMessageHeader::IsValid(const MessageStartChars& pchMessageStartIn) const } +ServiceFlags GetDesirableServiceFlags(ServiceFlags services) { + if ((services & NODE_NETWORK_LIMITED) && g_initial_block_download_completed) { + return ServiceFlags(NODE_NETWORK_LIMITED | NODE_WITNESS); + } + return ServiceFlags(NODE_NETWORK | NODE_WITNESS); +} + +void SetServiceFlagsIBDCache(bool state) { + g_initial_block_download_completed = state; +} + CAddress::CAddress() : CService() { diff --git a/src/protocol.h b/src/protocol.h index 4907c38e5..e518d1194 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -278,7 +278,6 @@ enum ServiceFlags : uint64_t { // BIP process. }; -extern std::atomic g_initial_block_download_completed; /** * Gets the set of service flags which are "desirable" for a given peer. * @@ -303,12 +302,10 @@ extern std::atomic g_initial_block_download_completed; * If the NODE_NONE return value is changed, contrib/seeds/makeseeds.py * should be updated appropriately to filter for the same nodes. */ -static ServiceFlags GetDesirableServiceFlags(ServiceFlags services) { - if ((services & NODE_NETWORK_LIMITED) && g_initial_block_download_completed) { - return ServiceFlags(NODE_NETWORK_LIMITED | NODE_WITNESS); - } - return ServiceFlags(NODE_NETWORK | NODE_WITNESS); -} +ServiceFlags GetDesirableServiceFlags(ServiceFlags services); + +/** Set the current IBD status in order to figure out the desirable service flags */ +void SetServiceFlagsIBDCache(bool status); /** * A shortcut for (services & GetDesirableServiceFlags(services))