minor optimization

This commit is contained in:
zzz
2013-11-08 14:24:06 +00:00
parent 6b326c3705
commit 50f45a50a7
2 changed files with 19 additions and 11 deletions

View File

@ -337,12 +337,14 @@ class BuildExecutor implements Runnable {
}
} else {
if ( (allowed > 0) && (!wanted.isEmpty()) ) {
Collections.shuffle(wanted, _context.random());
try {
Collections.sort(wanted, new TunnelPoolComparator());
} catch (IllegalArgumentException iae) {
// Java 7 TimSort - see info in TunnelPoolComparator
continue;
if (wanted.size() > 1) {
Collections.shuffle(wanted, _context.random());
try {
Collections.sort(wanted, new TunnelPoolComparator());
} catch (IllegalArgumentException iae) {
// Java 7 TimSort - see info in TunnelPoolComparator
continue;
}
}
// force the loops to be short, since 3 consecutive tunnel build requests can take

View File

@ -674,11 +674,17 @@ public class TunnelPool {
if (rlen > 1 && llen <= 1)
return 1;
}
byte lhsDelta[] = DataHelper.xor(lhs.getFarEnd().getData(), _base);
byte rhsDelta[] = DataHelper.xor(rhs.getFarEnd().getData(), _base);
int rv = DataHelper.compareTo(lhsDelta, rhsDelta);
if (rv != 0)
return rv;
// TODO don't prefer exact match for security?
byte lhsb[] = lhs.getFarEnd().getData();
byte rhsb[] = rhs.getFarEnd().getData();
for (int i = 0; i < _base.length; i++) {
int ld = (lhsb[i] ^ _base[i]) & 0xff;
int rd = (rhsb[i] ^ _base[i]) & 0xff;
if (ld < rd)
return -1;
if (ld > rd)
return 1;
}
// latest-expiring first as a tie-breaker
return (int) (rhs.getExpiration() - lhs.getExpiration());
}