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 f0ef33f9ee880a1afc3930268a45d34e6e779db0..1cd207e45400839c335f05c82433f3480594cf2a 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 b58f06462db4948c3b5cc47f1c5123ff58138671..bc92e33be3a6f0a40e20b0725832c91f405ee16b 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 ea35681f9e3a74369fa40d503c4b6a4d4beb501c..6665409a034c83d76b6d895d97b303a7e71bbfb7 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 628d8b0a5d7c12bd228ea699a48cae07e9dd600b..7bfd342b147881751846393e1d2a3b2c4fab3002 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"); }