Author: markt
Date: Mon Feb 27 11:14:28 2012
New Revision: 1294109

URL: http://svn.apache.org/viewvc?rev=1294109&view=rev
Log:
Don't read/write more data than the internal buffers can handle

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeNioProcessor.java

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeNioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeNioProcessor.java?rev=1294109&r1=1294108&r2=1294109&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeNioProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeNioProcessor.java 
Mon Feb 27 11:14:28 2012
@@ -35,6 +35,8 @@ public class UpgradeNioProcessor extends
 
     private final NioChannel nioChannel;
     private final NioSelectorPool pool;
+    private final int maxRead;
+    private final int maxWrite;
 
     public UpgradeNioProcessor(SocketWrapper<NioChannel> wrapper,
             UpgradeInbound upgradeInbound, NioSelectorPool pool) {
@@ -42,6 +44,8 @@ public class UpgradeNioProcessor extends
 
         this.nioChannel = wrapper.getSocket();
         this.pool = pool;
+        this.maxRead = nioChannel.getBufHandler().getReadBuffer().capacity();
+        this.maxWrite = nioChannel.getBufHandler().getWriteBuffer().capacity();
     }
 
 
@@ -82,7 +86,11 @@ public class UpgradeNioProcessor extends
 
     @Override
     public void write(byte[]b, int off, int len) throws IOException {
-        writeToSocket(b, off, len);
+        int written = 0;
+        while (len - written > maxWrite) {
+            written += writeToSocket(b, off + written, maxWrite);
+        }
+        writeToSocket(b, off + written, len - written);
     }
 
     /*
@@ -100,7 +108,12 @@ public class UpgradeNioProcessor extends
 
     @Override
     public int read(byte[] bytes, int off, int len) throws IOException {
-        return readSocket(true, bytes, off, len);
+        if (len > maxRead) {
+            return readSocket(true, bytes, off, maxRead);
+        } else {
+            return readSocket(true, bytes, off, len);
+        }
+
     }
 
 



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

Reply via email to