aboutsummaryrefslogtreecommitdiff
path: root/src/addrman.cpp
diff options
context:
space:
mode:
authorSuhas Daftuar <sdaftuar@gmail.com>2019-02-26 16:34:26 -0500
committerSuhas Daftuar <sdaftuar@gmail.com>2019-02-27 16:53:44 -0500
commitf71fdda3bc2e7acd2a8b74e882364866b8b0f55b (patch)
treee022ff5d8909a1aac79dc30346450961cd7f07a6 /src/addrman.cpp
parent4991e3c813c9848d3b3957ea3ad433f02fca9e81 (diff)
downloadbitcoin-f71fdda3bc2e7acd2a8b74e882364866b8b0f55b.tar.xz
[addrman] Ensure collisions eventually get resolved
After 40 minutes, time out a test-before-evict entry and just evict without testing. Otherwise, if we were unable to test an entry for some reason, we might break using feelers altogether.
Diffstat (limited to 'src/addrman.cpp')
-rw-r--r--src/addrman.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/addrman.cpp b/src/addrman.cpp
index 468618095c..45b686e1de 100644
--- a/src/addrman.cpp
+++ b/src/addrman.cpp
@@ -569,6 +569,13 @@ void CAddrMan::ResolveCollisions_()
Good_(info_new, false, GetAdjustedTime());
erase_collision = true;
}
+ } else if (GetAdjustedTime() - info_new.nLastSuccess > ADDRMAN_TEST_WINDOW) {
+ // If the collision hasn't resolved in some reasonable amount of time,
+ // just evict the old entry -- we must not be able to
+ // connect to it for some reason.
+ LogPrint(BCLog::ADDRMAN, "Unable to test; swapping %s for %s in tried table anyway\n", info_new.ToString(), info_old.ToString());
+ Good_(info_new, false, GetAdjustedTime());
+ erase_collision = true;
}
} else { // Collision is not actually a collision anymore
Good_(info_new, false, GetAdjustedTime());