diff --git a/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioChannelSink.java b/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioChannelSink.java index 9ecdcb0699..bf034eca3a 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioChannelSink.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioChannelSink.java @@ -29,7 +29,7 @@ public abstract class AbstractNioChannelSink extends AbstractChannelSink { if (ch instanceof AbstractNioChannel) { AbstractNioChannel channel = (AbstractNioChannel) ch; // check if the current thread is a worker thread if so we can send the event now - if (channel.worker.thread != Thread.currentThread()) { + if (!AbstractNioWorker.isIoThread(channel)) { channel.worker.executeInIoThread(new Runnable() { @Override diff --git a/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioWorker.java b/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioWorker.java index 8f6dafd468..14ffdc6d99 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioWorker.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/AbstractNioWorker.java @@ -504,7 +504,7 @@ abstract class AbstractNioWorker implements Worker { } static boolean isIoThread(AbstractNioChannel channel) { - return channel.worker.thread == null || Thread.currentThread() == channel.worker.thread; + return Thread.currentThread() == channel.worker.thread; } private void setOpWrite(AbstractNioChannel channel) { diff --git a/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioChannelSink.java b/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioChannelSink.java index 633818ec01..485e5cb452 100644 --- a/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioChannelSink.java +++ b/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioChannelSink.java @@ -30,7 +30,7 @@ public abstract class AbstractOioChannelSink extends AbstractChannelSink { if (ch instanceof AbstractOioChannel) { AbstractOioChannel channel = (AbstractOioChannel) ch; Worker worker = channel.worker; - if (worker != null && channel.workerThread != Thread.currentThread()) { + if (worker != null && !AbstractOioWorker.isIoThead(channel)) { channel.worker.executeInIoThread(new Runnable() { @Override diff --git a/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioWorker.java b/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioWorker.java index 167b58309d..ea773bc442 100644 --- a/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioWorker.java +++ b/transport/src/main/java/io/netty/channel/socket/oio/AbstractOioWorker.java @@ -81,11 +81,11 @@ abstract class AbstractOioWorker implements Worker channel.workerThread = null; // Clean up. - close(channel, succeededFuture(channel)); + close(channel, succeededFuture(channel), true); } static boolean isIoThead(AbstractOioChannel channel) { - return channel.workerThread == null || Thread.currentThread() == channel.workerThread; + return Thread.currentThread() == channel.workerThread; } @Override @@ -164,9 +164,12 @@ abstract class AbstractOioWorker implements Worker } static void close(AbstractOioChannel channel, ChannelFuture future) { + close(channel, future, isIoThead(channel)); + } + + private static void close(AbstractOioChannel channel, ChannelFuture future, boolean iothread) { boolean connected = channel.isConnected(); boolean bound = channel.isBound(); - boolean iothread = isIoThead(channel); try { channel.closeSocket();