diff --git a/history.txt b/history.txt index 478d43784..facbc1f52 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,5 @@ 2019-05-02 zzz + * Android: Catch ISE from PRNG at shutdown (ticket #2077) * GeoIP Maxmind 2019-04-29 * NTCP: Rare EventPumper 100% CPU fix (ticket #2476) * UPnP: Remove finalize() in HTTPSocket (ticket #2490) diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 46b0184db..cef568607 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 = 11; + public final static long BUILD = 12; /** for example "-test" */ public final static String EXTRA = "-rc"; diff --git a/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java b/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java index 8fd8da26f..b8db36ccd 100644 --- a/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java +++ b/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java @@ -487,6 +487,17 @@ public class DHSessionKeyBuilder { } public void run() { + try { + run2(); + } catch (IllegalStateException ise) { + if (_isRunning) + throw ise; + // else ignore, thread can be slow to shutdown on Android, + // PRNG gets stopped first and throws ISE + } + } + + private void run2() { _isRunning = true; while (_isRunning) { //long start = System.currentTimeMillis(); diff --git a/router/java/src/net/i2p/router/transport/crypto/X25519KeyFactory.java b/router/java/src/net/i2p/router/transport/crypto/X25519KeyFactory.java index dace64032..6979c9d02 100644 --- a/router/java/src/net/i2p/router/transport/crypto/X25519KeyFactory.java +++ b/router/java/src/net/i2p/router/transport/crypto/X25519KeyFactory.java @@ -77,6 +77,17 @@ public class X25519KeyFactory extends I2PThread { } public void run() { + try { + run2(); + } catch (IllegalStateException ise) { + if (_isRunning) + throw ise; + // else ignore, thread can be slow to shutdown on Android, + // PRNG gets stopped first and throws ISE + } + } + + private void run2() { _isRunning = true; while (_isRunning) { int startSize = getSize();