From 7a126cf22378deeea59994339616675fad2dce76 Mon Sep 17 00:00:00 2001 From: subtly Date: Wed, 11 Feb 2015 14:10:08 -0500 Subject: [PATCH] update nodebucket modification time when node is inserted or bucket is refreshed so bucket-refresh doesn't loop --- libp2p/NodeTable.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libp2p/NodeTable.cpp b/libp2p/NodeTable.cpp index e6f8a171b..a65ebd53c 100644 --- a/libp2p/NodeTable.cpp +++ b/libp2p/NodeTable.cpp @@ -323,15 +323,20 @@ void NodeTable::noteActiveNode(Public const& _pubk, bi::udp::endpoint const& _en if (s.nodes.size() >= s_bucketSize) { + // It's only contested iff nodeentry exists contested = s.nodes.front().lock(); if (!contested) { s.nodes.pop_front(); s.nodes.push_back(node); + s.touch(); } } else + { s.nodes.push_back(node); + s.touch(); + } } if (contested) @@ -515,6 +520,7 @@ void NodeTable::doRefreshBuckets(boost::system::error_code const& _ec) for (auto& d: m_state) if (chrono::steady_clock::now() - d.modified > c_bucketRefresh) { + d.touch(); while (!d.nodes.empty()) { auto n = d.nodes.front();