From dfbbe3e9286d85e2e0fda2ff13ca63f516850778 Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 1 Dec 2015 20:09:22 +0000 Subject: [PATCH] Transport: Interrupt DH refiller thread when pool is empty, to speed refilling and reduce pumper stalls Reduces empties by 10x --- .../i2p/router/transport/crypto/DHSessionKeyBuilder.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 ad9a3e43d..1b09e2d62 100644 --- a/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java +++ b/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java @@ -505,9 +505,10 @@ public class DHSessionKeyBuilder { break; long curCalc = System.currentTimeMillis() - curStart; // for some relief... - try { - Thread.sleep(Math.min(200, Math.max(10, _calcDelay + (curCalc * 3)))); - } catch (InterruptedException ie) { // nop + if (!interrupted()) { + try { + Thread.sleep(Math.min(200, Math.max(10, _calcDelay + (curCalc * 3)))); + } catch (InterruptedException ie) {} } } } @@ -541,6 +542,8 @@ public class DHSessionKeyBuilder { if (_log.shouldLog(Log.INFO)) _log.info("No more builders, creating one now"); _context.statManager().addRateData("crypto.DHEmpty", 1); builder = precalc(); + // stop sleeping, wake up, make some more + this.interrupt(); } return builder; }