message: Avoid test-before-evict evictions of current peers
  Outbound peer logic prevents connecting to addresses that we're already
  connected to, so prevent inadvertent eviction of current peers via
  test-before-evict by checking this condition and marking current peer's
  addresses as Good().
diff: @@ -2001,11 +2001,30 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
  if (nTries > 100)
  break;
  - CAddrInfo addr = addrman.SelectTriedCollision();
  + CAddrInfo addr;
  - // SelectTriedCollision returns an invalid address if it is empty.
  - if (!fFeeler || !addr.IsValid()) {
  - addr = addrman.Select(fFeeler);
  + if (fFeeler) {
  + // First, try to get a tried table collision address. This returns
  + // an empty (invalid) address if there are no collisions to try.
  + addr = addrman.SelectTriedCollision();
  +
  + if (!addr.IsValid()) {
  + // No tried table collisions. Select a new table address
  + // for our feeler.
  + addr = addrman.Select(true);
  + } else if (AlreadyConnectedToAddress(addr)) {
  + // If test-before-evict logic would have us connect to a
  + // peer that we're already connected to, just mark that
  + // address as Good(). We won't be able to initiate the
  + // connection anyway, so this avoids inadvertently evicting
  + // a currently-connected peer.
  + addrman.Good(addr);
  + // Select a new table address for our feeler instead.
  + addr = addrman.Select(true);
  + }
  + } else {
  + // Not a feeler
  + addr = addrman.Select();
  }
  // Require outbound connections, other than feelers, to be to distinct network groups
  