@@ -57,8 +57,8 @@ static constexpr auto HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1ms;
5757 * behind headers chain.
5858 */
5959static constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4 ;
60- /* * Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds */
61- static constexpr int64_t CHAIN_SYNC_TIMEOUT = 20 * 60 ; // 20 minutes
60+ /* * Timeout for (unprotected) outbound peers to sync to our chainwork */
61+ static constexpr auto CHAIN_SYNC_TIMEOUT{20min};
6262/* * How frequently to check for stale tips */
6363static constexpr auto STALE_CHECK_INTERVAL{10min};
6464/* * How frequently to check for extra outbound peers and disconnect */
@@ -329,7 +329,7 @@ class PeerManagerImpl final : public PeerManager
329329 EXCLUSIVE_LOCKS_REQUIRED(cs_main);
330330
331331 /* * Consider evicting an outbound peer based on the amount of time they've been behind our tip */
332- void ConsiderEviction (CNode& pto, int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
332+ void ConsiderEviction (CNode& pto, std::chrono::seconds time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
333333
334334 /* * If we have extra outbound peers, try to disconnect the one with the oldest block announcement */
335335 void EvictExtraOutboundPeers (std::chrono::seconds now) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
@@ -742,7 +742,7 @@ struct CNodeState {
742742 */
743743 struct ChainSyncTimeoutState {
744744 // ! A timeout used for checking whether our peer has sufficiently synced
745- int64_t m_timeout{0 };
745+ std::chrono::seconds m_timeout{0s };
746746 // ! A header with the work we require on our peer's chain
747747 const CBlockIndex* m_work_header{nullptr };
748748 // ! After timeout is reached, set to true after sending getheaders
@@ -949,10 +949,10 @@ bool PeerManagerImpl::TipMayBeStale()
949949{
950950 AssertLockHeld (cs_main);
951951 const Consensus::Params& consensusParams = m_chainparams.GetConsensus ();
952- if (count_seconds ( m_last_tip_update) == 0 ) {
952+ if (m_last_tip_update. load ( ) == 0s ) {
953953 m_last_tip_update = GetTime<std::chrono::seconds>();
954954 }
955- return count_seconds ( m_last_tip_update) < GetTime () - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty ();
955+ return m_last_tip_update. load ( ) < GetTime<std::chrono::seconds> () - std::chrono::seconds{ consensusParams.nPowTargetSpacing * 3 } && mapBlocksInFlight.empty ();
956956}
957957
958958bool PeerManagerImpl::CanDirectFetch ()
@@ -4180,7 +4180,7 @@ bool PeerManagerImpl::ProcessMessages(CNode* pfrom, std::atomic<bool>& interrupt
41804180 return fMoreWork ;
41814181}
41824182
4183- void PeerManagerImpl::ConsiderEviction (CNode& pto, int64_t time_in_seconds)
4183+ void PeerManagerImpl::ConsiderEviction (CNode& pto, std::chrono::seconds time_in_seconds)
41844184{
41854185 AssertLockHeld (cs_main);
41864186
@@ -4195,20 +4195,20 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds)
41954195 // unless it's invalid, in which case we should find that out and
41964196 // disconnect from them elsewhere).
41974197 if (state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock ->nChainWork >= m_chainman.ActiveChain ().Tip ()->nChainWork ) {
4198- if (state.m_chain_sync .m_timeout != 0 ) {
4199- state.m_chain_sync .m_timeout = 0 ;
4198+ if (state.m_chain_sync .m_timeout != 0s ) {
4199+ state.m_chain_sync .m_timeout = 0s ;
42004200 state.m_chain_sync .m_work_header = nullptr ;
42014201 state.m_chain_sync .m_sent_getheaders = false ;
42024202 }
4203- } else if (state.m_chain_sync .m_timeout == 0 || (state.m_chain_sync .m_work_header != nullptr && state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock ->nChainWork >= state.m_chain_sync .m_work_header ->nChainWork )) {
4203+ } else if (state.m_chain_sync .m_timeout == 0s || (state.m_chain_sync .m_work_header != nullptr && state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock ->nChainWork >= state.m_chain_sync .m_work_header ->nChainWork )) {
42044204 // Our best block known by this peer is behind our tip, and we're either noticing
42054205 // that for the first time, OR this peer was able to catch up to some earlier point
42064206 // where we checked against our tip.
42074207 // Either way, set a new timeout based on current tip.
42084208 state.m_chain_sync .m_timeout = time_in_seconds + CHAIN_SYNC_TIMEOUT;
42094209 state.m_chain_sync .m_work_header = m_chainman.ActiveChain ().Tip ();
42104210 state.m_chain_sync .m_sent_getheaders = false ;
4211- } else if (state.m_chain_sync .m_timeout > 0 && time_in_seconds > state.m_chain_sync .m_timeout ) {
4211+ } else if (state.m_chain_sync .m_timeout > 0s && time_in_seconds > state.m_chain_sync .m_timeout ) {
42124212 // No evidence yet that our peer has synced to a chain with work equal to that
42134213 // of our tip, when we first detected it was behind. Send a single getheaders
42144214 // message to give the peer a chance to update us.
@@ -4221,7 +4221,7 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds)
42214221 LogPrint (BCLog::NET, " sending getheaders to outbound peer=%d to verify chain work (current best known block:%s, benchmark blockhash: %s)\n " , pto.GetId (), state.pindexBestKnownBlock != nullptr ? state.pindexBestKnownBlock ->GetBlockHash ().ToString () : " <none>" , state.m_chain_sync .m_work_header ->GetBlockHash ().ToString ());
42224222 m_connman.PushMessage (&pto, msgMaker.Make (NetMsgType::GETHEADERS, m_chainman.ActiveChain ().GetLocator (state.m_chain_sync .m_work_header ->pprev ), uint256 ()));
42234223 state.m_chain_sync .m_sent_getheaders = true ;
4224- constexpr int64_t HEADERS_RESPONSE_TIME = 120 ; // 2 minutes
4224+ constexpr auto HEADERS_RESPONSE_TIME{2min};
42254225 // Bump the timeout to allow a response, which could clear the timeout
42264226 // (if the response shows the peer has synced), reset the timeout (if
42274227 // the peer syncs to the required work but not to our tip), or result
@@ -4348,7 +4348,8 @@ void PeerManagerImpl::CheckForStaleTipAndEvictPeers()
43484348 // Check whether our tip is stale, and if so, allow using an extra
43494349 // outbound peer
43504350 if (!fImporting && !fReindex && m_connman.GetNetworkActive () && m_connman.GetUseAddrmanOutgoing () && TipMayBeStale ()) {
4351- LogPrintf (" Potential stale tip detected, will try using extra outbound peer (last tip update: %d seconds ago)\n " , count_seconds (now) - count_seconds (m_last_tip_update));
4351+ LogPrintf (" Potential stale tip detected, will try using extra outbound peer (last tip update: %d seconds ago)\n " ,
4352+ count_seconds (now - m_last_tip_update.load ()));
43524353 m_connman.SetTryNewOutboundPeer (true );
43534354 } else if (m_connman.GetTryNewOutboundPeer ()) {
43544355 m_connman.SetTryNewOutboundPeer (false );
@@ -4969,7 +4970,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
49694970
49704971 // Check that outbound peers have reasonable chains
49714972 // GetTime() is used by this anti-DoS logic so we can test this using mocktime
4972- ConsiderEviction (*pto, GetTime ());
4973+ ConsiderEviction (*pto, GetTime<std::chrono::seconds> ());
49734974
49744975 //
49754976 // Message: getdata (blocks)
0 commit comments