From bc85543ef2309f1a3d1eb8280f61623ede69f352 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 15 Jun 2015 14:35:15 +0000 Subject: [PATCH] Fix removal of subsession aliases from tunnel manager on I2CP connection shutdown Sort tweaks for shared clients in summary bar --- .../java/src/net/i2p/router/web/SummaryHelper.java | 6 ++++-- .../i2p/router/client/ClientConnectionRunner.java | 12 ++++++++++-- .../src/net/i2p/router/client/ClientManager.java | 4 ++-- .../router/client/ClientMessageEventListener.java | 2 -- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index f0ef33f9ee..1cd207e454 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -491,9 +491,11 @@ public class SummaryHelper extends HelperBase { public int compare(Destination lhs, Destination rhs) { String lname = getName(lhs); String rname = getName(rhs); - if (lname.equals(xsc)) + boolean lshared = lname.startsWith("shared clients") || lname.startsWith(xsc); + boolean rshared = rname.startsWith("shared clients") || rname.startsWith(xsc); + if (lshared && !rshared) return -1; - if (rname.equals(xsc)) + if (rshared && !lshared) return 1; return Collator.getInstance().compare(lname, rname); } diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index b58f06462d..bc92e33be3 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -202,6 +202,8 @@ class ClientConnectionRunner { LeaseSet ls = sp.currentLeaseSet; if (ls != null) _context.netDb().unpublish(ls); + if (!sp.isPrimary) + _context.tunnelManager().removeAlias(sp.dest); } synchronized (_alreadyProcessed) { _alreadyProcessed.clear(); @@ -414,15 +416,21 @@ class ClientConnectionRunner { if (ls != null) _context.netDb().unpublish(ls); isPrimary = sp.isPrimary; + if (!isPrimary) + _context.tunnelManager().removeAlias(sp.dest); + break; } } - if (isPrimary) { + if (isPrimary && !_sessions.isEmpty()) { // kill all the others also for (SessionParams sp : _sessions.values()) { - _manager.unregisterSession(id, sp.dest); + if (_log.shouldLog(Log.INFO)) + _log.info("Destroying remaining client subsession " + sp.sessionId); + _manager.unregisterSession(sp.sessionId, sp.dest); LeaseSet ls = sp.currentLeaseSet; if (ls != null) _context.netDb().unpublish(ls); + _context.tunnelManager().removeAlias(sp.dest); } } } diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java index ea35681f9e..6665409a03 100644 --- a/router/java/src/net/i2p/router/client/ClientManager.java +++ b/router/java/src/net/i2p/router/client/ClientManager.java @@ -220,14 +220,14 @@ class ClientManager { * Remove all sessions for this runner. */ public void unregisterConnection(ClientConnectionRunner runner) { - if (_log.shouldLog(Log.WARN)) - _log.warn("Unregistering (dropping) a client connection"); synchronized (_pendingRunners) { _pendingRunners.remove(runner); } List<SessionId> ids = runner.getSessionIds(); List<Destination> dests = runner.getDestinations(); + if (_log.shouldLog(Log.WARN)) + _log.warn("Unregistering (dropping) a client connection with ids: " + ids); synchronized (_runners) { for (SessionId id : ids) { _runnerSessionIds.remove(id); diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java index 628d8b0a5d..7bfd342b14 100644 --- a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java +++ b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java @@ -426,8 +426,6 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi if (left <= 0) { _runner.stopRunning(); } else { - if (cfg != null) - _context.tunnelManager().removeAlias(cfg.getDestination()); if (_log.shouldLog(Log.INFO)) _log.info("Still " + left + " sessions left"); } -- GitLab