From adab0cc3d396141d8a2d818c57e2d1398fc209b1 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 24 Oct 2010 16:55:29 +0000 Subject: [PATCH] * NTCP: Catch a race after stop() --- .../router/transport/ntcp/NTCPSendFinisher.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java index 207db4c3ca..fd5cf1ac91 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java @@ -2,6 +2,7 @@ package net.i2p.router.transport.ntcp; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.ThreadFactory; @@ -24,9 +25,9 @@ import net.i2p.util.Log; */ public class NTCPSendFinisher { private static final int THREADS = 4; - private I2PAppContext _context; - private NTCPTransport _transport; - private Log _log; + private final I2PAppContext _context; + private final NTCPTransport _transport; + private final Log _log; private int _count; private ThreadPoolExecutor _executor; @@ -47,7 +48,12 @@ public class NTCPSendFinisher { } public void add(OutNetMessage msg) { - _executor.execute(new RunnableEvent(msg)); + try { + _executor.execute(new RunnableEvent(msg)); + } catch (RejectedExecutionException ree) { + // race with stop() + _log.warn("NTCP send finisher stopped, discarding msg.afterSend()"); + } } // not really needed for now but in case we want to add some hooks like afterExecute() -- GitLab