From 60f501ca5d8584d6931bee1d8aeaf33d55cfa2ca Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sun, 24 Jun 2012 22:53:15 +0000 Subject: [PATCH] avoid incorrect assert in the DHT --- include/libtorrent/kademlia/observer.hpp | 2 ++ src/kademlia/rpc_manager.cpp | 2 +- src/kademlia/traversal_algorithm.cpp | 9 ++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/libtorrent/kademlia/observer.hpp b/include/libtorrent/kademlia/observer.hpp index 2c6ccf7e2..46a33d307 100644 --- a/include/libtorrent/kademlia/observer.hpp +++ b/include/libtorrent/kademlia/observer.hpp @@ -81,6 +81,7 @@ struct observer : boost::noncopyable #if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS m_in_constructor = true; m_was_sent = false; + m_was_abandoned = false; #endif set_target(ep); } @@ -165,6 +166,7 @@ public: #if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS bool m_in_constructor:1; bool m_was_sent:1; + bool m_was_abandoned:1; #endif }; diff --git a/src/kademlia/rpc_manager.cpp b/src/kademlia/rpc_manager.cpp index 0b8483698..eb9eb137a 100644 --- a/src/kademlia/rpc_manager.cpp +++ b/src/kademlia/rpc_manager.cpp @@ -487,7 +487,7 @@ observer::~observer() // reported back to the traversal_algorithm as // well. If it wasn't sent, it cannot have been // reported back - TORRENT_ASSERT(m_was_sent == bool(flags & flag_done)); + TORRENT_ASSERT(m_was_sent == bool(flags & flag_done) || m_was_abandoned); TORRENT_ASSERT(!m_in_constructor); } diff --git a/src/kademlia/traversal_algorithm.cpp b/src/kademlia/traversal_algorithm.cpp index 338af5664..5a310d983 100644 --- a/src/kademlia/traversal_algorithm.cpp +++ b/src/kademlia/traversal_algorithm.cpp @@ -156,7 +156,14 @@ void traversal_algorithm::add_entry(node_id const& id, udp::endpoint addr, unsig i = m_results.insert(i, o); } - if (m_results.size() > 100) m_results.resize(100); + if (m_results.size() > 100) + { +#ifdef TORRENT_DEBUG + for (int i = 100; i < m_results.size(); ++i) + m_results[i]->m_was_abandoned = true; +#endif + m_results.resize(100); + } } void traversal_algorithm::start()