From d1a2295f0d58423652b124b48fc887a9721b765c Mon Sep 17 00:00:00 2001 From: Jeremy Rubin Date: Wed, 15 Jun 2016 19:28:04 -0400 Subject: [PATCH] Made the ForEachNode* functions in src/net.cpp more pragmatic and self documenting --- src/main.cpp | 3 --- src/net.cpp | 37 +++++++++++++++++++++++++++++++++---- src/net.h | 12 ++++++++---- src/rpc/misc.cpp | 1 - src/rpc/net.cpp | 1 - src/rpc/rawtransaction.cpp | 1 - src/wallet/wallet.cpp | 1 - 7 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 1835d9712..e4c9ce562 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3091,7 +3091,6 @@ bool ActivateBestChain(CValidationState &state, const CChainParams& chainparams, pnode->PushBlockHash(hash); } } - return true; }); } // Notify external listeners about the new tip. @@ -4727,7 +4726,6 @@ static void RelayTransaction(const CTransaction& tx, CConnman& connman) connman.ForEachNode([&inv](CNode* pnode) { pnode->PushInventory(inv); - return true; }); } @@ -4749,7 +4747,6 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman& connma uint64_t hashKey = CSipHasher(hasher).Write(pnode->id).Finalize(); mapMix.emplace(hashKey, pnode); } - return true; }; auto pushfunc = [&addr, &mapMix, &nRelayNodes] { diff --git a/src/net.cpp b/src/net.cpp index 508b0dd96..bf5cc07db 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2697,7 +2697,7 @@ bool CConnman::ForNode(NodeId id, std::function func) return found != nullptr && func(found); } -bool CConnman::ForEachNode(std::function func) +bool CConnman::ForEachNodeContinueIf(std::function func) { LOCK(cs_vNodes); for (auto&& node : vNodes) @@ -2706,7 +2706,7 @@ bool CConnman::ForEachNode(std::function func) return true; } -bool CConnman::ForEachNode(std::function func) const +bool CConnman::ForEachNodeContinueIf(std::function func) const { LOCK(cs_vNodes); for (const auto& node : vNodes) @@ -2715,7 +2715,7 @@ bool CConnman::ForEachNode(std::function func) const return true; } -bool CConnman::ForEachNodeThen(std::function pre, std::function post) +bool CConnman::ForEachNodeContinueIfThen(std::function pre, std::function post) { bool ret = true; LOCK(cs_vNodes); @@ -2728,7 +2728,7 @@ bool CConnman::ForEachNodeThen(std::function pre, std::funct return ret; } -bool CConnman::ForEachNodeThen(std::function pre, std::function post) const +bool CConnman::ForEachNodeContinueIfThen(std::function pre, std::function post) const { bool ret = true; LOCK(cs_vNodes); @@ -2741,6 +2741,35 @@ bool CConnman::ForEachNodeThen(std::function pre, std: return ret; } +void CConnman::ForEachNode(std::function func) +{ + LOCK(cs_vNodes); + for (auto&& node : vNodes) + func(node); +} + +void CConnman::ForEachNode(std::function func) const +{ + LOCK(cs_vNodes); + for (const auto& node : vNodes) + func(node); +} + +void CConnman::ForEachNodeThen(std::function pre, std::function post) +{ + LOCK(cs_vNodes); + for (auto&& node : vNodes) + pre(node); + post(); +} + +void CConnman::ForEachNodeThen(std::function pre, std::function post) const +{ + LOCK(cs_vNodes); + for (const auto& node : vNodes) + pre(node); + post(); +} int64_t PoissonNextSend(int64_t nNow, int average_interval_seconds) { return nNow + (int64_t)(log1p(GetRand(1ULL << 48) * -0.0000000000000035527136788 /* -1/2^48 */) * average_interval_seconds * -1000000.0 + 0.5); } diff --git a/src/net.h b/src/net.h index 018126d67..6ee0430f2 100644 --- a/src/net.h +++ b/src/net.h @@ -129,10 +129,14 @@ public: bool CheckIncomingNonce(uint64_t nonce); bool ForNode(NodeId id, std::function func); - bool ForEachNode(std::function func); - bool ForEachNode(std::function func) const; - bool ForEachNodeThen(std::function pre, std::function post); - bool ForEachNodeThen(std::function pre, std::function post) const; + bool ForEachNodeContinueIf(std::function func); + bool ForEachNodeContinueIf(std::function func) const; + bool ForEachNodeContinueIfThen(std::function pre, std::function post); + bool ForEachNodeContinueIfThen(std::function pre, std::function post) const; + void ForEachNode(std::function func); + void ForEachNode(std::function func) const; + void ForEachNodeThen(std::function pre, std::function post); + void ForEachNodeThen(std::function pre, std::function post) const; void RelayTransaction(const CTransaction& tx); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index ffd377b48..2b5782367 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -481,7 +481,6 @@ UniValue setmocktime(const UniValue& params, bool fHelp) if(g_connman) { g_connman->ForEachNode([t](CNode* pnode) { pnode->nLastSend = pnode->nLastRecv = t; - return true; }); } diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 61b6b62c9..b011029f5 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -61,7 +61,6 @@ UniValue ping(const UniValue& params, bool fHelp) // Request that each node send a ping during next message processing pass g_connman->ForEachNode([](CNode* pnode) { pnode->fPingQueued = true; - return true; }); return NullUniValue; } diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 3daf1681f..d2ad0a52b 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -898,7 +898,6 @@ UniValue sendrawtransaction(const UniValue& params, bool fHelp) g_connman->ForEachNode([&inv](CNode* pnode) { pnode->PushInventory(inv); - return true; }); return hashTx.GetHex(); } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index fd8b056bf..60ac2ea16 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1465,7 +1465,6 @@ bool CWalletTx::RelayWalletTransaction(CConnman* connman) connman->ForEachNode([&inv](CNode* pnode) { pnode->PushInventory(inv); - return true; }); return true; }