From 2321499c8cc2aa28a31b065717bd61122ce11629 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 26 Feb 2009 10:51:03 +0000 Subject: [PATCH] There was no need to introduce a thread local to avoid event recursion --- .../netty/channel/socket/nio/NioSocketChannel.java | 1 + .../jboss/netty/channel/socket/nio/NioWorker.java | 14 ++++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioSocketChannel.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioSocketChannel.java index 343bf258c8..a5e61c2a7b 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioSocketChannel.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioSocketChannel.java @@ -65,6 +65,7 @@ class NioSocketChannel extends AbstractChannel final Queue writeBuffer = new WriteBuffer(); final AtomicInteger writeBufferSize = new AtomicInteger(); final AtomicInteger highWaterMarkCounter = new AtomicInteger(); + volatile boolean inWriteNowLoop; MessageEvent currentWriteEvent; int currentWriteIndex; diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java index c2f8d74b91..c42b3d558e 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java @@ -51,7 +51,6 @@ import org.jboss.netty.channel.ReceiveBufferSizePredictor; import org.jboss.netty.logging.InternalLogger; import org.jboss.netty.logging.InternalLoggerFactory; import org.jboss.netty.util.LinkedTransferQueue; -import org.jboss.netty.util.ThreadLocalBoolean; import org.jboss.netty.util.ThreadRenamingRunnable; /** @@ -69,8 +68,6 @@ class NioWorker implements Runnable { private static final int CONSTRAINT_LEVEL = NioProviderMetadata.CONSTRAINT_LEVEL; - private static final ThreadLocalBoolean writing = new ThreadLocalBoolean(); - private final int bossId; private final int id; private final Executor executor; @@ -330,15 +327,10 @@ class NioWorker implements Runnable { return; } - if (writing.get()) { + if (channel.inWriteNowLoop) { scheduleWriteIfNecessary(channel); } else { - writing.set(Boolean.TRUE); - try { - writeNow(channel, channel.getConfig().getWriteSpinCount()); - } finally { - writing.set(Boolean.FALSE); - } + writeNow(channel, channel.getConfig().getWriteSpinCount()); } } @@ -375,6 +367,7 @@ class NioWorker implements Runnable { Queue writeBuffer = channel.writeBuffer; synchronized (channel.writeLock) { + channel.inWriteNowLoop = true; evt = channel.currentWriteEvent; for (;;) { if (evt == null) { @@ -429,6 +422,7 @@ class NioWorker implements Runnable { } } } + channel.inWriteNowLoop = false; } fireWriteComplete(channel, writtenBytes);