aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/net_processing.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index d67ced99ea..72b1984b5f 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -39,6 +39,8 @@
#include <validation.h>
#include <algorithm>
+#include <atomic>
+#include <chrono>
#include <memory>
#include <optional>
#include <typeinfo>
@@ -57,10 +59,10 @@ static constexpr auto HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1ms;
static constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4;
/** Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds */
static constexpr int64_t CHAIN_SYNC_TIMEOUT = 20 * 60; // 20 minutes
-/** How frequently to check for stale tips, in seconds */
-static constexpr int64_t STALE_CHECK_INTERVAL = 10 * 60; // 10 minutes
-/** How frequently to check for extra outbound peers and disconnect, in seconds */
-static constexpr int64_t EXTRA_PEER_CHECK_INTERVAL = 45;
+/** How frequently to check for stale tips */
+static constexpr auto STALE_CHECK_INTERVAL{10min};
+/** How frequently to check for extra outbound peers and disconnect */
+static constexpr auto EXTRA_PEER_CHECK_INTERVAL{45s};
/** Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict */
static constexpr std::chrono::seconds MINIMUM_CONNECT_TIME{30};
/** SHA256("main address relay")[0:8] */
@@ -422,7 +424,7 @@ private:
std::atomic<int> m_best_height{-1};
/** Next time to check for stale tip */
- int64_t m_stale_tip_check_time{0};
+ std::chrono::seconds m_stale_tip_check_time{0s};
/** Whether this node is running in blocks only mode */
const bool m_ignore_incoming_txs;
@@ -541,7 +543,7 @@ private:
std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> > mapBlocksInFlight GUARDED_BY(cs_main);
/** When our tip was last updated. */
- std::atomic<int64_t> m_last_tip_update{0};
+ std::atomic<std::chrono::seconds> m_last_tip_update{0s};
/** Determine whether or not a peer can request a transaction, and return it (or nullptr if not found or not allowed). */
CTransactionRef FindTxForGetData(const CNode& peer, const GenTxid& gtxid, const std::chrono::seconds mempool_req, const std::chrono::seconds now) LOCKS_EXCLUDED(cs_main);
@@ -947,10 +949,10 @@ bool PeerManagerImpl::TipMayBeStale()
{
AssertLockHeld(cs_main);
const Consensus::Params& consensusParams = m_chainparams.GetConsensus();
- if (m_last_tip_update == 0) {
- m_last_tip_update = GetTime();
+ if (count_seconds(m_last_tip_update) == 0) {
+ m_last_tip_update = GetTime<std::chrono::seconds>();
}
- return m_last_tip_update < GetTime() - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty();
+ return count_seconds(m_last_tip_update) < GetTime() - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty();
}
bool PeerManagerImpl::CanDirectFetch()
@@ -1506,7 +1508,7 @@ void PeerManagerImpl::StartScheduledTasks(CScheduler& scheduler)
void PeerManagerImpl::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindex)
{
m_orphanage.EraseForBlock(*pblock);
- m_last_tip_update = GetTime();
+ m_last_tip_update = GetTime<std::chrono::seconds>();
{
LOCK(m_recent_confirmed_transactions_mutex);
@@ -4338,20 +4340,20 @@ void PeerManagerImpl::CheckForStaleTipAndEvictPeers()
{
LOCK(cs_main);
- int64_t time_in_seconds = GetTime();
+ auto now{GetTime<std::chrono::seconds>()};
- EvictExtraOutboundPeers(std::chrono::seconds{time_in_seconds});
+ EvictExtraOutboundPeers(now);
- if (time_in_seconds > m_stale_tip_check_time) {
+ if (now > m_stale_tip_check_time) {
// Check whether our tip is stale, and if so, allow using an extra
// outbound peer
if (!fImporting && !fReindex && m_connman.GetNetworkActive() && m_connman.GetUseAddrmanOutgoing() && TipMayBeStale()) {
- LogPrintf("Potential stale tip detected, will try using extra outbound peer (last tip update: %d seconds ago)\n", time_in_seconds - m_last_tip_update);
+ 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));
m_connman.SetTryNewOutboundPeer(true);
} else if (m_connman.GetTryNewOutboundPeer()) {
m_connman.SetTryNewOutboundPeer(false);
}
- m_stale_tip_check_time = time_in_seconds + STALE_CHECK_INTERVAL;
+ m_stale_tip_check_time = now + STALE_CHECK_INTERVAL;
}
if (!m_initial_sync_finished && CanDirectFetch()) {