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