diff --git a/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutor.java b/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutor.java index f8a9e98e68..44f5a48dd0 100644 --- a/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutor.java +++ b/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutor.java @@ -154,4 +154,9 @@ public abstract class AbstractEventExecutor extends AbstractExecutorService impl public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { throw new UnsupportedOperationException(); } + + @Override + public void close() throws Exception { + shutdownGracefully().syncUninterruptibly(); + } } diff --git a/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutorGroup.java b/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutorGroup.java index 546258a995..63d95fd794 100644 --- a/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutorGroup.java +++ b/common/src/main/java/io/netty/util/concurrent/AbstractEventExecutorGroup.java @@ -114,4 +114,9 @@ public abstract class AbstractEventExecutorGroup implements EventExecutorGroup { public void execute(Runnable command) { next().execute(command); } + + @Override + public void close() throws Exception { + shutdownGracefully().syncUninterruptibly(); + } } diff --git a/common/src/main/java/io/netty/util/concurrent/EventExecutorGroup.java b/common/src/main/java/io/netty/util/concurrent/EventExecutorGroup.java index d2ba63389a..6fd919d613 100644 --- a/common/src/main/java/io/netty/util/concurrent/EventExecutorGroup.java +++ b/common/src/main/java/io/netty/util/concurrent/EventExecutorGroup.java @@ -27,7 +27,7 @@ import java.util.concurrent.TimeUnit; * to shut them down in a global fashion. * */ -public interface EventExecutorGroup extends ScheduledExecutorService { +public interface EventExecutorGroup extends ScheduledExecutorService, AutoCloseable { /** * Returns {@code true} if and only if all {@link EventExecutor}s managed by this {@link EventExecutorGroup} diff --git a/transport/src/main/java/io/netty/channel/PausableChannelEventExecutor.java b/transport/src/main/java/io/netty/channel/PausableChannelEventExecutor.java index cb9f804180..48c4e5efda 100644 --- a/transport/src/main/java/io/netty/channel/PausableChannelEventExecutor.java +++ b/transport/src/main/java/io/netty/channel/PausableChannelEventExecutor.java @@ -326,6 +326,11 @@ abstract class PausableChannelEventExecutor implements PausableEventExecutor, Ch unwrap().execute(command); } + @Override + public void close() throws Exception { + unwrap().close(); + } + private static final class ChannelCallableEventExecutor implements CallableEventExecutorAdapter { final Channel channel;