From 4154f4252094d7d5428e22d7b1987c883003f4cc Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Wed, 30 May 2012 04:27:19 -0700 Subject: [PATCH] Less restriction in shutdown hook modification --- .../netty/channel/SingleThreadEventLoop.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/SingleThreadEventLoop.java b/transport/src/main/java/io/netty/channel/SingleThreadEventLoop.java index fb7d2f81c5..d29a8eecef 100644 --- a/transport/src/main/java/io/netty/channel/SingleThreadEventLoop.java +++ b/transport/src/main/java/io/netty/channel/SingleThreadEventLoop.java @@ -221,19 +221,29 @@ public abstract class SingleThreadEventLoop extends AbstractExecutorService impl return Thread.currentThread() == thread; } - public void addShutdownHook(Runnable task) { - ensureShutdownHookAccess(); - shutdownHooks.add(task); + public void addShutdownHook(final Runnable task) { + if (inEventLoop()) { + shutdownHooks.add(task); + } else { + execute(new Runnable() { + @Override + public void run() { + shutdownHooks.add(task); + } + }); + } } - public void removeShutdownHook(Runnable task) { - ensureShutdownHookAccess(); - shutdownHooks.remove(task); - } - - private void ensureShutdownHookAccess() { - if (!inEventLoop()) { - throw new IllegalStateException("must be called from the event loop"); + public void removeShutdownHook(final Runnable task) { + if (inEventLoop()) { + shutdownHooks.remove(task); + } else { + execute(new Runnable() { + @Override + public void run() { + shutdownHooks.remove(task); + } + }); } }