diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 55d404d91ed..5a7c998af7a 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 ea78ab6856f..2ec26fbd3e5 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 4907c38e5c3..e518d119440 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))