Author: violetagg Date: Thu Aug 18 14:43:05 2016 New Revision: 1756798 URL: http://svn.apache.org/viewvc?rev=1756798&view=rev Log: Reduce duplications. Extract a new method SocketWrapperBase.populateReadBuffer(byte[], int, int).
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1756798&r1=1756797&r2=1756798&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Thu Aug 18 14:43:05 2016 @@ -2279,19 +2279,10 @@ public class AprEndpoint extends Abstrac @Override - public int read(boolean block, byte[] b, int off, int len) - throws IOException { - - socketBufferHandler.configureReadBufferForRead(); - ByteBuffer readBuffer = socketBufferHandler.getReadBuffer(); - int remaining = readBuffer.remaining(); - - // Is there enough data in the read buffer to satisfy this request? - // Copy what data there is in the read buffer to the byte array - if (remaining > 0) { - remaining = Math.min(remaining, len); - readBuffer.get(b, off, remaining); - return remaining; + public int read(boolean block, byte[] b, int off, int len) throws IOException { + int nRead = populateReadBuffer(b, off, len); + if (nRead > 0) { + return nRead; /* * Since more bytes may have arrived since the buffer was last * filled, it is an option at this point to perform a @@ -2302,14 +2293,14 @@ public class AprEndpoint extends Abstrac } // Fill the read buffer as best we can. - int nRead = fillReadBuffer(block); + nRead = fillReadBuffer(block); - // Full as much of the remaining byte array as possible with the + // Fill as much of the remaining byte array as possible with the // data that was just read if (nRead > 0) { socketBufferHandler.configureReadBufferForRead(); nRead = Math.min(nRead, len); - readBuffer.get(b, off, nRead); + socketBufferHandler.getReadBuffer().get(b, off, nRead); } return nRead; } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1756798&r1=1756797&r2=1756798&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Thu Aug 18 14:43:05 2016 @@ -838,36 +838,26 @@ public class Nio2Endpoint extends Abstra } } - socketBufferHandler.configureReadBufferForRead(); - ByteBuffer readBuffer = socketBufferHandler.getReadBuffer(); - int remaining = readBuffer.remaining(); - - // Is there enough data in the read buffer to satisfy this request? - // Copy what data there is in the read buffer to the byte array - if (remaining > 0) { - remaining = Math.min(remaining, len); - readBuffer.get(b, off, remaining); - if (log.isDebugEnabled()) { - log.debug("Socket: [" + this + "], Read from buffer: [" + remaining + "]"); - } + int nRead = populateReadBuffer(b, off, len); + if (nRead > 0) { // This may be sufficient to complete the request and we // don't want to trigger another read since if there is no // more data to read and this request takes a while to // process the read will timeout triggering an error. readPending.release(); - return remaining; + return nRead; } synchronized (readCompletionHandler) { // Fill the read buffer as best we can. - int nRead = fillReadBuffer(block); + nRead = fillReadBuffer(block); // Fill as much of the remaining byte array as possible with the // data that was just read if (nRead > 0) { socketBufferHandler.configureReadBufferForRead(); nRead = Math.min(nRead, len); - readBuffer.get(b, off, nRead); + socketBufferHandler.getReadBuffer().get(b, off, nRead); } else if (nRead == 0 && !block) { readInterest = true; } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1756798&r1=1756797&r2=1756798&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Thu Aug 18 14:43:05 2016 @@ -25,7 +25,6 @@ import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; -import java.nio.ByteBuffer; import java.nio.channels.CancelledKeyException; import java.nio.channels.FileChannel; import java.nio.channels.SelectionKey; @@ -1133,19 +1132,10 @@ public class NioEndpoint extends Abstrac @Override - public int read(boolean block, byte[] b, int off, int len) - throws IOException { - - socketBufferHandler.configureReadBufferForRead(); - ByteBuffer readBuffer = socketBufferHandler.getReadBuffer(); - int remaining = readBuffer.remaining(); - - // Is there enough data in the read buffer to satisfy this request? - // Copy what data there is in the read buffer to the byte array - if (remaining > 0) { - remaining = Math.min(remaining, len); - readBuffer.get(b, off, remaining); - return remaining; + public int read(boolean block, byte[] b, int off, int len) throws IOException { + int nRead = populateReadBuffer(b, off, len); + if (nRead > 0) { + return nRead; /* * Since more bytes may have arrived since the buffer was last * filled, it is an option at this point to perform a @@ -1156,15 +1146,15 @@ public class NioEndpoint extends Abstrac } // Fill the read buffer as best we can. - int nRead = fillReadBuffer(block); + nRead = fillReadBuffer(block); updateLastRead(); - // Full as much of the remaining byte array as possible with the + // Fill as much of the remaining byte array as possible with the // data that was just read if (nRead > 0) { socketBufferHandler.configureReadBufferForRead(); nRead = Math.min(nRead, len); - readBuffer.get(b, off, nRead); + socketBufferHandler.getReadBuffer().get(b, off, nRead); } return nRead; } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1756798&r1=1756797&r2=1756798&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Thu Aug 18 14:43:05 2016 @@ -26,11 +26,15 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.buf.ByteBufferHolder; import org.apache.tomcat.util.res.StringManager; public abstract class SocketWrapperBase<E> { + private static final Log log = LogFactory.getLog(SocketWrapperBase.class); + protected static final StringManager sm = StringManager.getManager(SocketWrapperBase.class); private final E socket; @@ -277,6 +281,25 @@ public abstract class SocketWrapperBase< public abstract int read(boolean block, byte[] b, int off, int len) throws IOException; public abstract boolean isReadyForRead() throws IOException; + protected int populateReadBuffer(byte[] b, int off, int len) { + socketBufferHandler.configureReadBufferForRead(); + ByteBuffer readBuffer = socketBufferHandler.getReadBuffer(); + int remaining = readBuffer.remaining(); + + // Is there enough data in the read buffer to satisfy this request? + // Copy what data there is in the read buffer to the byte array + if (remaining > 0) { + remaining = Math.min(remaining, len); + readBuffer.get(b, off, remaining); + + if (log.isDebugEnabled()) { + log.debug("Socket: [" + this + "], Read from buffer: [" + remaining + "]"); + } + } + return remaining; + } + + /** * Return input that has been read to the input buffer for re-reading by the * correct component. There are times when a component may read more data --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org