From 010bb0a2fe8636bd6c7e93712c5607f6dcda8c90 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 12 Oct 2020 13:29:46 +0000 Subject: [PATCH] NTCP: Fix sending termination on idle timeout (ticket #2777) --- .../java/src/net/i2p/router/transport/ntcp/EventPumper.java | 2 +- .../src/net/i2p/router/transport/ntcp/NTCPConnection.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index 10612b8a36..63bfa05d1a 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -302,8 +302,8 @@ class EventPumper implements Runnable { if ( con.getTimeSinceSend(now) > expire && con.getTimeSinceReceive(now) > expire) { // we haven't sent or received anything in a really long time, so lets just close 'er up + // con will cancel the key con.sendTerminationAndClose(); - key.cancel(); if (_log.shouldInfo()) _log.info("Failsafe or expire close for " + con); failsafeCloses++; diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java index 1b02a65d3f..0c4d4a80c0 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java @@ -1043,8 +1043,8 @@ public class NTCPConnection implements Closeable { /** * NTCP 1 or 2. - * For NTCP1, sends termination and then closes the connection after a brief delay. - * For NTCP2, simply closes the connection immediately. + * For NTCP1, simply closes the connection immediately. + * For NTCP2, sends termination and then closes the connection after a brief delay. * * @since 0.9.36 */ @@ -1066,6 +1066,8 @@ public class NTCPConnection implements Closeable { * @since 0.9.36 */ private void sendTermination(int reason, int validFramesRcvd) { + // So we don't get called again by the event pumper idle closer + _lastSendTime = _context.clock().now(); // TODO add param to clear queues? // no synch needed, sendNTCP2() is synched if (_log.shouldInfo())