From 31cfddc2182db016df21b8177af04b7802131448 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 7 May 2015 16:46:15 +0000 Subject: [PATCH] Router: Clear I2CP lookup cache on exit --- core/java/src/net/i2p/client/I2PSessionImpl.java | 14 +++++++++++++- router/java/src/net/i2p/router/Router.java | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java index ce5f44ef4d..ca193f77fa 100644 --- a/core/java/src/net/i2p/client/I2PSessionImpl.java +++ b/core/java/src/net/i2p/client/I2PSessionImpl.java @@ -59,9 +59,14 @@ import net.i2p.util.VersionComparator; * Implementation of an I2P session running over TCP. This class is NOT thread safe - * only one thread should send messages at any given time * + * Public only for clearCache(). + * Except for methods definied in I2PSession and I2CPMessageEventListener, + * not maintained as a public API, not for external use. + * Use I2PClientFactory to get an I2PClient and then createSession(). + * * @author jrandom */ -abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessageEventListener { +public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessageEventListener { protected final Log _log; /** who we are */ private final Destination _myDestination; @@ -1149,6 +1154,13 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa } } + /** @since 0.9.20 */ + public static void clearCache() { + synchronized (_lookupCache) { + _lookupCache.clear(); + } + } + /** * Blocking. Waits a max of 10 seconds by default. * See lookupDest with maxWait parameter to change. diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index ea55021edc..e7e8db67ea 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -20,6 +20,7 @@ import java.util.concurrent.ConcurrentHashMap; import gnu.getopt.Getopt; +import net.i2p.client.I2PSessionImpl; import net.i2p.crypto.SigUtil; import net.i2p.data.Base64; import net.i2p.data.Certificate; @@ -418,6 +419,7 @@ public class Router implements RouterClock.ClockShiftListener { PublicKey.clearCache(); SigningPublicKey.clearCache(); SigUtil.clearCaches(); + I2PSessionImpl.clearCache(); } /** -- GitLab