From 9b1d9b0c61ef82284ef84c0c6e0e3994e12a83ba Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Fri, 29 Jan 2010 02:59:40 +0000 Subject: [PATCH] Reduced unnecessary duplicate calls on NioSocketChannel --- .../netty/channel/socket/nio/NioWorker.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) 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 0dae337fb2..550b7cb5dd 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 @@ -24,7 +24,6 @@ import java.nio.channels.AsynchronousCloseException; import java.nio.channels.CancelledKeyException; import java.nio.channels.ClosedChannelException; import java.nio.channels.NotYetConnectedException; -import java.nio.channels.ScatteringByteChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.util.Iterator; @@ -303,17 +302,15 @@ class NioWorker implements Runnable { } private boolean read(SelectionKey k) { - ScatteringByteChannel ch = (ScatteringByteChannel) k.channel(); - NioSocketChannel channel = (NioSocketChannel) k.attachment(); + final java.nio.channels.SocketChannel nioch = + (java.nio.channels.SocketChannel) k.channel(); + final NioSocketChannel channel = (NioSocketChannel) k.attachment(); - ReceiveBufferSizePredictor predictor = - channel.getConfig().getReceiveBufferSizePredictor(); - ChannelBufferFactory bufferFactory = - channel.getConfig().getBufferFactory(); - - ChannelBuffer buffer = - bufferFactory.getBuffer(predictor.nextReceiveBufferSize()); + final NioSocketChannelConfig cfg = channel.getConfig(); + final ReceiveBufferSizePredictor predictor = cfg.getReceiveBufferSizePredictor(); + final ChannelBufferFactory bufferFactory = cfg.getBufferFactory(); + final ChannelBuffer buffer = bufferFactory.getBuffer(predictor.nextReceiveBufferSize()); final ByteBuffer directBuffer; final boolean fromPool = !buffer.isDirect(); if (fromPool) { @@ -326,7 +323,7 @@ class NioWorker implements Runnable { int readBytes = 0; boolean failure = true; try { - while ((ret = ch.read(directBuffer)) > 0) { + while ((ret = nioch.read(directBuffer)) > 0) { readBytes += ret; if (!directBuffer.hasRemaining()) { break; @@ -379,13 +376,13 @@ class NioWorker implements Runnable { cleanUpWriteBuffer(channel); return; } - + final ReentrantLock writeLock = channel.writeLock; if (writeLock.isHeldByCurrentThread() || !writeLock.tryLock()) { rescheduleWrite(channel); return; } - + final Queue writeBuffer = channel.writeBuffer; final int writeSpinCount = channel.getConfig().getWriteSpinCount(); @@ -646,7 +643,7 @@ class NioWorker implements Runnable { channel.setRawInterestOpsNow(interestOps); return false; } - + switch (CONSTRAINT_LEVEL) { case 0: if (channel.getRawInterestOps() != interestOps) { @@ -686,7 +683,7 @@ class NioWorker implements Runnable { } return false; } - + private final class RegisterTask implements Runnable { private final NioSocketChannel channel; private final ChannelFuture future;