Author: markt
Date: Wed Sep  4 21:15:33 2013
New Revision: 1520145

URL: http://svn.apache.org/r1520145
Log:
Add some plumbing with a view to supporting non-blocking writes.

Modified:
    tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1520145&r1=1520144&r2=1520145&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Wed Sep  
4 21:15:33 2013
@@ -158,6 +158,13 @@ public abstract class AbstractAjpProcess
 
 
     /**
+     * Location of next write of the response message (used withnon-blocking
+     * writes when the message may not be written in a single write). Avalue of
+     * -1 indicates that no message has been written to the buffer.
+     */
+    private int responseMsgPos = -1;
+
+    /**
      * Body message.
      */
     protected final AjpMessage bodyMessage;
@@ -1452,6 +1459,25 @@ public abstract class AbstractAjpProcess
     }
 
 
+    private void writeResponseMessage(boolean block) throws IOException {
+        int len = responseMessage.getLen();
+        int written = 1;
+        if (responseMsgPos == -1) {
+            // New message. Advance the write position to the beginning
+            responseMsgPos = 0;
+        }
+
+        while (written > 0 && responseMsgPos < len) {
+            written = output(
+                    responseMessage.getBuffer(), responseMsgPos, len, block);
+            responseMsgPos += written;
+        }
+
+        if (responseMsgPos == len) {
+            responseMsgPos = -1;
+        }
+    }
+
     // ------------------------------------- InputStreamInputBuffer Inner Class
 
 
@@ -1526,7 +1552,7 @@ public abstract class AbstractAjpProcess
                     
responseMessage.appendByte(Constants.JK_AJP13_SEND_BODY_CHUNK);
                     responseMessage.appendBytes(chunk.getBytes(), 
chunk.getOffset() + off, thisTime);
                     responseMessage.end();
-                    output(responseMessage.getBuffer(), 0, 
responseMessage.getLen(), true);
+                    writeResponseMessage(true);
 
                     off += thisTime;
                 }



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

Reply via email to