forked from I2P_Developers/i2p.i2p
Add synch to fix race causing AIOOBE
http://forum.i2p/viewtopic.php?t=5061
This commit is contained in:
@ -361,18 +361,21 @@ public class ClientConnectionRunner {
|
|||||||
// TunnelPool.locked_buildNewLeaseSet() ensures that leases are sorted,
|
// TunnelPool.locked_buildNewLeaseSet() ensures that leases are sorted,
|
||||||
// so the comparison will always work.
|
// so the comparison will always work.
|
||||||
int leases = set.getLeaseCount();
|
int leases = set.getLeaseCount();
|
||||||
if (_currentLeaseSet != null && _currentLeaseSet.getLeaseCount() == leases) {
|
// synch so _currentLeaseSet isn't changed out from under us
|
||||||
for (int i = 0; i < leases; i++) {
|
synchronized (this) {
|
||||||
if (! _currentLeaseSet.getLease(i).getTunnelId().equals(set.getLease(i).getTunnelId()))
|
if (_currentLeaseSet != null && _currentLeaseSet.getLeaseCount() == leases) {
|
||||||
break;
|
for (int i = 0; i < leases; i++) {
|
||||||
if (! _currentLeaseSet.getLease(i).getGateway().equals(set.getLease(i).getGateway()))
|
if (! _currentLeaseSet.getLease(i).getTunnelId().equals(set.getLease(i).getTunnelId()))
|
||||||
break;
|
break;
|
||||||
if (i == leases - 1) {
|
if (! _currentLeaseSet.getLease(i).getGateway().equals(set.getLease(i).getGateway()))
|
||||||
if (_log.shouldLog(Log.INFO))
|
break;
|
||||||
_log.info("Requested leaseSet hasn't changed");
|
if (i == leases - 1) {
|
||||||
if (onCreateJob != null)
|
if (_log.shouldLog(Log.INFO))
|
||||||
_context.jobQueue().addJob(onCreateJob);
|
_log.info("Requested leaseSet hasn't changed");
|
||||||
return; // no change
|
if (onCreateJob != null)
|
||||||
|
_context.jobQueue().addJob(onCreateJob);
|
||||||
|
return; // no change
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user