From 38c0be5da3af17208b165e73cee7612d3670b038 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Sun, 28 Feb 2021 11:16:52 +0000 Subject: [PATCH] [net processing] Refactor MaybeSendAddr() - early exits Add early exit guard clauses if node.RelayAddrsWithConn() is false or if current_time < node.m_next_addr_send. Add comments. This commit leaves some lines over-indented. Those will be fixed in a subsequent whitespace-only commit. --- src/net_processing.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index cc0231afac3..fd8c653837b 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -4143,11 +4143,16 @@ void PeerManagerImpl::MaybeSendPing(CNode& node_to, Peer& peer, std::chrono::mic void PeerManagerImpl::MaybeSendAddr(CNode& node, std::chrono::microseconds current_time) { - LOCK(node.m_addr_send_times_mutex); + // Nothing to do for non-address-relay peers + if (!node.RelayAddrsWithConn()) return; + + assert(node.m_addr_known); + const CNetMsgMaker msgMaker(node.GetCommonVersion()); - if (fListen && node.RelayAddrsWithConn() && - !m_chainman.ActiveChainstate().IsInitialBlockDownload() && + LOCK(node.m_addr_send_times_mutex); + // Periodically advertise our local address to the peer. + if (fListen && !m_chainman.ActiveChainstate().IsInitialBlockDownload() && node.m_next_local_addr_send < current_time) { // If we've sent before, clear the bloom filter for the peer, so that our // self-announcement will actually go out. @@ -4165,14 +4170,12 @@ void PeerManagerImpl::MaybeSendAddr(CNode& node, std::chrono::microseconds curre node.m_next_local_addr_send = PoissonNextSend(current_time, AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL); } - // - // Message: addr - // - if (node.RelayAddrsWithConn() && node.m_next_addr_send < current_time) { + // We sent an `addr` message to this peer recently. Nothing more to do. + if (current_time <= node.m_next_addr_send) return; + { node.m_next_addr_send = PoissonNextSend(current_time, AVG_ADDRESS_BROADCAST_INTERVAL); std::vector vAddr; vAddr.reserve(node.vAddrToSend.size()); - assert(node.m_addr_known); const char* msg_type; int make_flags;