From 0afabbd609fc057a7dcb2a8db2ee8622ccd55832 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 31 Oct 2010 14:36:56 +0000 Subject: [PATCH] Add synch to fix race causing AIOOBE http://forum.i2p/viewtopic.php?t=5061 --- .../router/client/ClientConnectionRunner.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index 42eef3480b..1c4fb2fd5e 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -361,18 +361,21 @@ public class ClientConnectionRunner { // TunnelPool.locked_buildNewLeaseSet() ensures that leases are sorted, // so the comparison will always work. int leases = set.getLeaseCount(); - if (_currentLeaseSet != null && _currentLeaseSet.getLeaseCount() == leases) { - for (int i = 0; i < leases; i++) { - if (! _currentLeaseSet.getLease(i).getTunnelId().equals(set.getLease(i).getTunnelId())) - break; - if (! _currentLeaseSet.getLease(i).getGateway().equals(set.getLease(i).getGateway())) - break; - if (i == leases - 1) { - if (_log.shouldLog(Log.INFO)) - _log.info("Requested leaseSet hasn't changed"); - if (onCreateJob != null) - _context.jobQueue().addJob(onCreateJob); - return; // no change + // synch so _currentLeaseSet isn't changed out from under us + synchronized (this) { + if (_currentLeaseSet != null && _currentLeaseSet.getLeaseCount() == leases) { + for (int i = 0; i < leases; i++) { + if (! _currentLeaseSet.getLease(i).getTunnelId().equals(set.getLease(i).getTunnelId())) + break; + if (! _currentLeaseSet.getLease(i).getGateway().equals(set.getLease(i).getGateway())) + break; + if (i == leases - 1) { + if (_log.shouldLog(Log.INFO)) + _log.info("Requested leaseSet hasn't changed"); + if (onCreateJob != null) + _context.jobQueue().addJob(onCreateJob); + return; // no change + } } } } -- GitLab