From a8a0e2a91c31d28fb9c9ad7df752de7b1ac9f56a Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Fri, 1 May 2009 12:43:19 +0000 Subject: [PATCH] * I2PTunnel: - Try to fix locking to prevent duplicate destinations when using the new option new-dest-on-resume. Still not right for shared clients but should be better for non-shared. --- .../java/src/net/i2p/i2ptunnel/I2PTunnelClient.java | 2 +- .../src/net/i2p/i2ptunnel/I2PTunnelClientBase.java | 13 +++++++++---- .../src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java | 7 +++++-- .../java/src/net/i2p/i2ptunnel/web/EditBean.java | 4 +++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java index 12931f3a27..36edc07660 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java @@ -39,7 +39,7 @@ public class I2PTunnelClient extends I2PTunnelClientBase { return; } - StringTokenizer tok = new StringTokenizer(destinations, ","); + StringTokenizer tok = new StringTokenizer(destinations, ", "); dests = new ArrayList(1); while (tok.hasMoreTokens()) { String destination = tok.nextToken(); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java index c4eafde506..3c571857af 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java @@ -345,7 +345,9 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna public I2PSocket createI2PSocket(Destination dest) throws I2PException, ConnectException, NoRouteToHostException, InterruptedIOException { if (sockMgr == null) { // we need this before getDefaultOptions() - sockMgr = getSocketManager(); + synchronized(sockLock) { + sockMgr = getSocketManager(); + } } return createI2PSocket(dest, getDefaultOptions()); } @@ -369,9 +371,12 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna if (sockMgr == null) { // delayed open - call get instead of build because the locking is up there - sockMgr = getSocketManager(); - } else if (Boolean.valueOf(getTunnel().getClientOptions().getProperty("i2cp.newDestOnResume")).booleanValue()) { - synchronized(sockMgr) { + synchronized(sockLock) { + sockMgr = getSocketManager(); + } + } else if (Boolean.valueOf(getTunnel().getClientOptions().getProperty("i2cp.closeOnIdle")).booleanValue() && + Boolean.valueOf(getTunnel().getClientOptions().getProperty("i2cp.newDestOnResume")).booleanValue()) { + synchronized(sockLock) { I2PSocketManager oldSockMgr = sockMgr; // This will build a new socket manager and a new dest if the session is closed. sockMgr = getSocketManager(); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index 53c3136b20..316731deec 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -211,8 +211,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable if (!defaultOpts.contains("i2p.streaming.inactivityTimeout")) defaultOpts.setProperty("i2p.streaming.inactivityTimeout", ""+DEFAULT_READ_TIMEOUT); // delayed start - if (sockMgr == null) - sockMgr = getSocketManager(); + if (sockMgr == null) { + synchronized(sockLock) { + sockMgr = getSocketManager(); + } + } I2PSocketOptions opts = sockMgr.buildOptions(defaultOpts); if (!defaultOpts.containsKey(I2PSocketOptions.PROP_CONNECT_TIMEOUT)) opts.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java index a029de725a..d606467c52 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java @@ -153,7 +153,9 @@ public class EditBean extends IndexBean { } public boolean getNewDest(int tunnel) { - return getBooleanProperty(tunnel, "i2cp.newDestOnResume"); + return getBooleanProperty(tunnel, "i2cp.newDestOnResume") && + getBooleanProperty(tunnel, "i2cp.closeOnIdle") && + !getBooleanProperty(tunnel, "persistentClientKey"); } public boolean getPersistentClientKey(int tunnel) { -- GitLab