[net] feeler connections can be made to outbound peers in same netgroup
Fixes a bug where feelers could be stuck trying to resolve a collision in the tried table that is to an address in the same netgroup as an existing outbound peer. Thanks to Muoi Tran for the original bug report and detailed debug logs to track this down.
This commit is contained in:
parent
4d834018e3
commit
4991e3c813
1 changed files with 8 additions and 2 deletions
10
src/net.cpp
10
src/net.cpp
|
@ -1765,9 +1765,15 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
|
||||||
addr = addrman.Select(fFeeler);
|
addr = addrman.Select(fFeeler);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we selected an invalid address, restart
|
// Require outbound connections to be to distinct network groups
|
||||||
if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr))
|
if (!fFeeler && setConnected.count(addr.GetGroup())) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we selected an invalid address, restart
|
||||||
|
if (!addr.IsValid() || IsLocal(addr)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// If we didn't find an appropriate destination after trying 100 addresses fetched from addrman,
|
// If we didn't find an appropriate destination after trying 100 addresses fetched from addrman,
|
||||||
// stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates
|
// stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates
|
||||||
|
|
Loading…
Reference in a new issue