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 { } else {
if ( (allowed > 0) && (!wanted.isEmpty()) ) { if ( (allowed > 0) && (!wanted.isEmpty()) ) {
Collections.shuffle(wanted, _context.random()); if (wanted.size() > 1) {
try { Collections.shuffle(wanted, _context.random());
Collections.sort(wanted, new TunnelPoolComparator()); try {
} catch (IllegalArgumentException iae) { Collections.sort(wanted, new TunnelPoolComparator());
// Java 7 TimSort - see info in TunnelPoolComparator } catch (IllegalArgumentException iae) {
continue; // Java 7 TimSort - see info in TunnelPoolComparator
continue;
}
} }
// force the loops to be short, since 3 consecutive tunnel build requests can take // 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) if (rlen > 1 && llen <= 1)
return 1; return 1;
} }
byte lhsDelta[] = DataHelper.xor(lhs.getFarEnd().getData(), _base); // TODO don't prefer exact match for security?
byte rhsDelta[] = DataHelper.xor(rhs.getFarEnd().getData(), _base); byte lhsb[] = lhs.getFarEnd().getData();
int rv = DataHelper.compareTo(lhsDelta, rhsDelta); byte rhsb[] = rhs.getFarEnd().getData();
if (rv != 0) for (int i = 0; i < _base.length; i++) {
return rv; 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 // latest-expiring first as a tie-breaker
return (int) (rhs.getExpiration() - lhs.getExpiration()); return (int) (rhs.getExpiration() - lhs.getExpiration());
} }