From a3a1110b413de3eab32a002696df650fc2b40e8f Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 31 Oct 2011 16:48:46 +0000 Subject: [PATCH] * ProfileOrganizer: - Fix rare NSEE thx sponge --- .../net/i2p/router/peermanager/ProfileOrganizer.java | 2 +- .../net/i2p/router/peermanager/SpeedComparator.java | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index a3eebc3329..875223c21b 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -894,7 +894,7 @@ public class ProfileOrganizer { Set<PeerProfile> sorted = new TreeSet(new SpeedComparator()); sorted.addAll(_fastPeers.values()); Iterator<PeerProfile> iter = sorted.iterator(); - for (int i = 0; i < numToDemote; i++) { + for (int i = 0; i < numToDemote && iter.hasNext(); i++) { _fastPeers.remove(iter.next().getPeer()); } } diff --git a/router/java/src/net/i2p/router/peermanager/SpeedComparator.java b/router/java/src/net/i2p/router/peermanager/SpeedComparator.java index 793501e235..aad4043357 100644 --- a/router/java/src/net/i2p/router/peermanager/SpeedComparator.java +++ b/router/java/src/net/i2p/router/peermanager/SpeedComparator.java @@ -2,6 +2,8 @@ package net.i2p.router.peermanager; import java.util.Comparator; +import net.i2p.data.DataHelper; + /** * Order profiles by their speed (lowest first). * @since 0.7.10 @@ -17,6 +19,14 @@ class SpeedComparator implements Comparator<PeerProfile> { return 1; if (lval < rval) return -1; - return 0; + + // we don't wan't to return 0 so profiles don't vanish in the TreeSet + lval = left.getCapacityValue(); + rval = right.getCapacityValue(); + if (lval > rval) + return 1; + if (lval < rval) + return -1; + return DataHelper.compareTo(right.getPeer().getData(), left.getPeer().getData()); } } -- GitLab