From 37ebf04bb5969d3cfbbbc3cf0f3b553a739cba25 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sat, 16 Jul 2016 16:59:07 +0000 Subject: [PATCH] Streaming: Kill accept() when session disconnects --- .../net/i2p/client/streaming/impl/ConnectionHandler.java | 7 +++---- .../src/net/i2p/client/streaming/impl/MessageHandler.java | 6 +++--- history.txt | 7 ++++++- router/java/src/net/i2p/router/RouterVersion.java | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/ConnectionHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/ConnectionHandler.java index 7bffd2435d..7fc3c2fd17 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/impl/ConnectionHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/ConnectionHandler.java @@ -54,15 +54,14 @@ class ConnectionHandler { if (_log.shouldLog(Log.WARN)) _log.warn("setActive(" + active + ") called, previously " + _active, new Exception("I did it")); // if starting, clear any old poison - // if stopping, the accept() loop will clear any pending sockets if (active && !_active) _synQueue.clear(); boolean wasActive = _active; _active = active; if (wasActive && !active) { - try { - _synQueue.put(new PoisonPacket()); // so we break from the accept() - waits until space is available - } catch (InterruptedException ie) {} + // stopping, clear any pending sockets + _synQueue.clear(); + _synQueue.offer(new PoisonPacket()); } } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java index 9725771a3c..c14688050f 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java @@ -103,6 +103,8 @@ class MessageHandler implements I2PSessionMuxedListener { if (_log.shouldLog(Log.WARN)) _log.warn("I2PSession disconnected"); _manager.disconnectAllHard(); + // kill anybody waiting in accept() + _manager.getConnectionHandler().setActive(false); for (I2PSocketManager.DisconnectListener lsnr : _listeners) { lsnr.sessionDisconnected(); @@ -119,9 +121,7 @@ class MessageHandler implements I2PSessionMuxedListener { */ public void errorOccurred(I2PSession session, String message, Throwable error) { if (_log.shouldLog(Log.WARN)) - _log.warn("error occurred: " + message + "- " + error.getMessage()); - if (_log.shouldLog(Log.WARN)) - _log.warn("cause", error); + _log.warn("error occurred: " + message + "- " + error.getMessage(), error); //_manager.disconnectAllHard(); } diff --git a/history.txt b/history.txt index ddb6e8d05d..ecf453fd80 100644 --- a/history.txt +++ b/history.txt @@ -1,5 +1,10 @@ -2016-06-26 zzz +2016-07-16 zzz + * I2CP Client: Handle disconnect properly if received before first LS + * Streaming: Kill accept() when session disconnects + +2016-06-25 zzz * SSU peer testing: Add implementation (ticket #1752; proposal #126) + * Utils: Improve random seed initialization 2016-06-22 zzz * SSU peer testing: diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 0725033fa6..f6e6df3a5c 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 3; + public final static long BUILD = 4; /** for example "-test" */ public final static String EXTRA = ""; -- GitLab