From 5ec179c33ceb163e8de1f13bc509148fafb3b238 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Sat, 17 Nov 2012 19:47:06 +0100 Subject: [PATCH] [#723] Use ExecutorServer.shutdown() in ExecutorHandler when terminate it. This way not tasks are lost --- .../netty/handler/execution/ChainedExecutor.java | 9 +++++++-- .../handler/execution/ChannelEventRunnable.java | 8 +------- .../netty/handler/execution/ExecutionHandler.java | 6 ++++-- .../handler/execution/ExecutionHandlerTest.java | 14 ++++---------- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/jboss/netty/handler/execution/ChainedExecutor.java b/src/main/java/org/jboss/netty/handler/execution/ChainedExecutor.java index 13ed203a7f..de7646b0d9 100644 --- a/src/main/java/org/jboss/netty/handler/execution/ChainedExecutor.java +++ b/src/main/java/org/jboss/netty/handler/execution/ChainedExecutor.java @@ -17,9 +17,9 @@ package org.jboss.netty.handler.execution; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import org.jboss.netty.util.ExternalResourceReleasable; -import org.jboss.netty.util.internal.ExecutorUtil; /** * A special {@link Executor} which allows to chain a series of @@ -72,7 +72,12 @@ public class ChainedExecutor implements Executor, ExternalResourceReleasable { } public void releaseExternalResources() { - ExecutorUtil.terminate(cur, next); + if (cur instanceof ExecutorService) { + ((ExecutorService) cur).shutdown(); + } + if (next instanceof ExecutorService) { + ((ExecutorService) next).shutdown(); + } releaseExternal(cur); releaseExternal(next); } diff --git a/src/main/java/org/jboss/netty/handler/execution/ChannelEventRunnable.java b/src/main/java/org/jboss/netty/handler/execution/ChannelEventRunnable.java index fd3d7304ca..3008d3012a 100644 --- a/src/main/java/org/jboss/netty/handler/execution/ChannelEventRunnable.java +++ b/src/main/java/org/jboss/netty/handler/execution/ChannelEventRunnable.java @@ -64,13 +64,7 @@ public abstract class ChannelEventRunnable implements Runnable, EstimatableObjec } public final void run() { - try { - PARENT.set(executor); - doRun(); - } finally { - PARENT.remove(); - } - + doRun(); } protected abstract void doRun(); diff --git a/src/main/java/org/jboss/netty/handler/execution/ExecutionHandler.java b/src/main/java/org/jboss/netty/handler/execution/ExecutionHandler.java index 7f2e4b17e3..79766f3487 100644 --- a/src/main/java/org/jboss/netty/handler/execution/ExecutionHandler.java +++ b/src/main/java/org/jboss/netty/handler/execution/ExecutionHandler.java @@ -16,6 +16,7 @@ package org.jboss.netty.handler.execution; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; @@ -31,7 +32,6 @@ import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ChannelUpstreamHandler; import org.jboss.netty.channel.Channels; import org.jboss.netty.util.ExternalResourceReleasable; -import org.jboss.netty.util.internal.ExecutorUtil; /** * Forwards an upstream {@link ChannelEvent} to an {@link Executor}. @@ -160,7 +160,9 @@ public class ExecutionHandler implements ChannelUpstreamHandler, ChannelDownstre */ public void releaseExternalResources() { Executor executor = getExecutor(); - ExecutorUtil.terminate(ChannelEventRunnable.PARENT, executor); + if (executor instanceof ExecutorService) { + ((ExecutorService) executor).shutdown(); + } if (executor instanceof ExternalResourceReleasable) { ((ExternalResourceReleasable) executor).releaseExternalResources(); } diff --git a/src/test/java/org/jboss/netty/handler/execution/ExecutionHandlerTest.java b/src/test/java/org/jboss/netty/handler/execution/ExecutionHandlerTest.java index e646765098..fc3e24f171 100644 --- a/src/test/java/org/jboss/netty/handler/execution/ExecutionHandlerTest.java +++ b/src/test/java/org/jboss/netty/handler/execution/ExecutionHandlerTest.java @@ -109,19 +109,13 @@ public class ExecutionHandlerTest { } public void sendUpstream(ChannelEvent e) { - try { - handler.releaseExternalResources(); - } catch (IllegalStateException ex) { - latch.countDown(); - } + handler.releaseExternalResources(); + latch.countDown(); } public void sendDownstream(ChannelEvent e) { - try { - handler.releaseExternalResources(); - } catch (IllegalStateException ex) { - latch.countDown(); - } + handler.releaseExternalResources(); + latch.countDown(); } public Object getAttachment() {