Author: markt
Date: Thu Jan  8 13:09:47 2015
New Revision: 1650268

URL: http://svn.apache.org/r1650268
Log:
Deque<ByteBufferHolder> is a little more complex than List<ByteBuffer>
but using the same structure for all connectors will improve code re-use
and thereby improve maintainability.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java?rev=1650268&r1=1650267&r2=1650268&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java 
Thu Jan  8 13:09:47 2015
@@ -31,6 +31,7 @@ import java.util.concurrent.TimeoutExcep
 import javax.servlet.RequestDispatcher;
 
 import org.apache.coyote.Response;
+import org.apache.tomcat.util.buf.ByteBufferHolder;
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.Nio2Channel;
 import org.apache.tomcat.util.net.Nio2Endpoint;
@@ -79,11 +80,6 @@ public class InternalNio2OutputBuffer ex
     protected AbstractEndpoint<Nio2Channel> endpoint = null;
 
     /**
-     * Used instead of the deque since it looks equivalent and simpler.
-     */
-    protected ArrayList<ByteBuffer> bufferedWrites = new ArrayList<>();
-
-    /**
      * Exception that occurred during writing.
      */
     protected IOException e = null;
@@ -109,9 +105,9 @@ public class InternalNio2OutputBuffer ex
                         if (attachment.hasRemaining()) {
                             arrayList.add(attachment);
                         }
-                        for (ByteBuffer buffer : bufferedWrites) {
+                        for (ByteBufferHolder buffer : bufferedWrites) {
                             buffer.flip();
-                            arrayList.add(buffer);
+                            arrayList.add(buffer.getBuf());
                         }
                         bufferedWrites.clear();
                         ByteBuffer[] array = 
arrayList.toArray(EMPTY_BUF_ARRAY);
@@ -164,9 +160,9 @@ public class InternalNio2OutputBuffer ex
                                 arrayList.add(buffer);
                             }
                         }
-                        for (ByteBuffer buffer : bufferedWrites) {
+                        for (ByteBufferHolder buffer : bufferedWrites) {
                             buffer.flip();
-                            arrayList.add(buffer);
+                            arrayList.add(buffer.getBuf());
                         }
                         bufferedWrites.clear();
                         ByteBuffer[] array = 
arrayList.toArray(EMPTY_BUF_ARRAY);
@@ -303,7 +299,7 @@ public class InternalNio2OutputBuffer ex
     private void addToBuffers(byte[] buf, int offset, int length) {
         ByteBuffer buffer = ByteBuffer.allocate(length);
         buffer.put(buf, offset, length);
-        bufferedWrites.add(buffer);
+        bufferedWrites.add(new ByteBufferHolder(buffer, false));
     }
 
 
@@ -336,8 +332,9 @@ public class InternalNio2OutputBuffer ex
             }
             try {
                 if (bufferedWrites.size() > 0) {
-                    for (ByteBuffer buffer : bufferedWrites) {
-                        buffer.flip();
+                    for (ByteBufferHolder holder : bufferedWrites) {
+                        holder.flip();
+                        ByteBuffer buffer = holder.getBuf();
                         while (buffer.hasRemaining()) {
                             if 
(socketWrapper.getSocket().write(buffer).get(socketWrapper.getTimeout(), 
TimeUnit.MILLISECONDS).intValue() < 0) {
                                 throw new 
EOFException(sm.getString("iob.failedwrite"));
@@ -383,9 +380,9 @@ public class InternalNio2OutputBuffer ex
                         if (socketWriteBuffer.hasRemaining()) {
                             arrayList.add(socketWriteBuffer);
                         }
-                        for (ByteBuffer buffer : bufferedWrites) {
+                        for (ByteBufferHolder buffer : bufferedWrites) {
                             buffer.flip();
-                            arrayList.add(buffer);
+                            arrayList.add(buffer.getBuf());
                         }
                         bufferedWrites.clear();
                         ByteBuffer[] array = 
arrayList.toArray(EMPTY_BUF_ARRAY);



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to