Author: markt
Date: Wed Aug 15 15:21:12 2018
New Revision: 1838106
URL: http://svn.apache.org/viewvc?rev=1838106&view=rev
Log:
Reduce code duplication
Modified:
tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/WriteBuffer.java
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=1838106&r1=1838105&r2=1838106&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Wed Aug 15
15:21:12 2018
@@ -32,8 +32,6 @@ import java.nio.channels.CompletionHandl
import java.nio.channels.FileChannel;
import java.nio.channels.NetworkChannel;
import java.nio.file.StandardOpenOption;
-import java.util.ArrayList;
-import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
@@ -577,11 +575,7 @@ public class Nio2Endpoint extends Abstra
} else if (!writeBuffer.isEmpty()) {
nestedWriteCompletionCount.get().incrementAndGet();
// Continue writing data using a gathering write
- List<ByteBuffer> arrayList = new ArrayList<>();
- if (attachment.hasRemaining()) {
- arrayList.add(attachment);
- }
- ByteBuffer[] array =
writeBuffer.transferToListAsArray(arrayList);
+ ByteBuffer[] array =
writeBuffer.toArray(attachment);
getSocket().write(array, 0, array.length,
toNio2Timeout(getWriteTimeout()),
TimeUnit.MILLISECONDS,
array, gatheringWriteCompletionHandler);
@@ -628,15 +622,9 @@ public class Nio2Endpoint extends Abstra
if (nBytes.longValue() < 0) {
failed(new
EOFException(sm.getString("iob.failedwrite")), attachment);
} else if (!writeBuffer.isEmpty() ||
arrayHasData(attachment)) {
- // Continue writing data
+ // Continue writing data using a gathering write
nestedWriteCompletionCount.get().incrementAndGet();
- List<ByteBuffer> arrayList = new ArrayList<>();
- for (ByteBuffer buffer : attachment) {
- if (buffer.hasRemaining()) {
- arrayList.add(buffer);
- }
- }
- ByteBuffer[] array =
writeBuffer.transferToListAsArray(arrayList);
+ ByteBuffer[] array =
writeBuffer.toArray(attachment);
getSocket().write(array, 0, array.length,
toNio2Timeout(getWriteTimeout()),
TimeUnit.MILLISECONDS,
array, gatheringWriteCompletionHandler);
@@ -1287,12 +1275,7 @@ public class Nio2Endpoint extends Abstra
if (hasPermit || writePending.tryAcquire()) {
socketBufferHandler.configureWriteBufferForRead();
if (!writeBuffer.isEmpty()) {
- // Gathering write of the main buffer plus all
leftovers
- List<ByteBuffer> arrayList = new ArrayList<>();
- if
(socketBufferHandler.getWriteBuffer().hasRemaining()) {
-
arrayList.add(socketBufferHandler.getWriteBuffer());
- }
- ByteBuffer[] array =
writeBuffer.transferToListAsArray(arrayList);
+ ByteBuffer[] array =
writeBuffer.toArray(socketBufferHandler.getWriteBuffer());
Nio2Endpoint.startInline();
getSocket().write(array, 0, array.length,
toNio2Timeout(getWriteTimeout()),
TimeUnit.MILLISECONDS, array,
gatheringWriteCompletionHandler);
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/WriteBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/WriteBuffer.java?rev=1838106&r1=1838105&r2=1838106&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/WriteBuffer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/WriteBuffer.java Wed Aug 15
15:21:12 2018
@@ -18,6 +18,7 @@ package org.apache.tomcat.util.net;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.LinkedBlockingDeque;
@@ -71,13 +72,27 @@ public class WriteBuffer {
}
- ByteBuffer[] transferToListAsArray(List<ByteBuffer> target) {
+ /**
+ * Create an array of ByteBuffers from the current WriteBuffer, prefixing
+ * that array with the provided ByteBuffers.
+ *
+ * @param prefixes The additional ByteBuffers to add to the start of the
+ * array
+ *
+ * @return an array of ByteBuffers from the current WriteBuffer prefixed by
+ * the provided ByteBuffers
+ */
+ ByteBuffer[] toArray(ByteBuffer... prefixes) {
+ List<ByteBuffer> result = new ArrayList<>();
+ for (ByteBuffer prefix : prefixes) {
+ result.add(prefix);
+ }
for (ByteBufferHolder buffer : buffers) {
buffer.flip();
- target.add(buffer.getBuf());
+ result.add(buffer.getBuf());
}
buffers.clear();
- return target.toArray(new ByteBuffer[target.size()]);
+ return result.toArray(new ByteBuffer[result.size()]);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]