From 2ed51a699cca2e350b8ae303f2a2f4684fab2c7d Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Tue, 22 Apr 2025 12:15:32 +0200 Subject: [PATCH] net: get AlreadyConnectedToAddress() to iterate the nodes itself Previously `CConnman::AlreadyConnectedToAddress()` used two calls to `CConnman::FindNode()`. However that iterates the nodes two times which is inefficient and this was the only caller of `CConnman::FindNode(const CNetAddr&)`. So, drop that `FindNode()` method and iterate the nodes inside `CConnman::AlreadyConnectedToAddress()`. --- src/net.cpp | 19 +++++++------------ src/net.h | 1 - 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index fc0edc1a5c1..53a8301bd71 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -332,17 +332,6 @@ bool IsLocal(const CService& addr) return mapLocalHost.count(addr) > 0; } -CNode* CConnman::FindNode(const CNetAddr& ip) -{ - LOCK(m_nodes_mutex); - for (CNode* pnode : m_nodes) { - if (static_cast(pnode->addr) == ip) { - return pnode; - } - } - return nullptr; -} - CNode* CConnman::FindNode(const std::string& addrName) { LOCK(m_nodes_mutex); @@ -367,7 +356,13 @@ CNode* CConnman::FindNode(const CService& addr) bool CConnman::AlreadyConnectedToAddress(const CAddress& addr) { - return FindNode(static_cast(addr)) || FindNode(addr.ToStringAddrPort()); + const CNetAddr& net_addr{addr}; + const std::string str_addr{addr.ToStringAddrPort()}; + + LOCK(m_nodes_mutex); + return std::ranges::any_of(m_nodes, [&net_addr, &str_addr](CNode* node) { + return node->addr == net_addr || node->m_addr_name == str_addr; + }); } bool CConnman::CheckIncomingNonce(uint64_t nonce) diff --git a/src/net.h b/src/net.h index 9fdec52115e..19b35e8fd2b 100644 --- a/src/net.h +++ b/src/net.h @@ -1352,7 +1352,6 @@ private: uint64_t CalculateKeyedNetGroup(const CNetAddr& ad) const; - CNode* FindNode(const CNetAddr& ip); CNode* FindNode(const std::string& addrName); CNode* FindNode(const CService& addr);