Mark, On 3/9/15 12:32 PM, ma...@apache.org wrote: > Author: markt > Date: Mon Mar 9 16:32:43 2015 > New Revision: 1665297 > > URL: http://svn.apache.org/r1665297 > Log: > Follow up to r1665062 > Callers assume that output() will fully write the data that is passed to it. > Ensure that this is the case when the AJP message size is larger than the > output buffer. > > Modified: > tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java > > Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java > URL: > http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1665297&r1=1665296&r2=1665297&view=diff > ============================================================================== > --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java > (original) > +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon > Mar 9 16:32:43 2015 > @@ -302,24 +302,29 @@ public class AjpNioProcessor extends Abs > ByteBuffer writeBuffer = > socketWrapper.getSocket().getBufHandler().getWriteBuffer(); > > - int toWrite = Math.min(length, writeBuffer.remaining()); > - writeBuffer.put(src, offset, toWrite); > - > - writeBuffer.flip(); > - > - long writeTimeout = att.getWriteTimeout(); > - Selector selector = null; > - try { > - selector = pool.get(); > - } catch ( IOException x ) { > - //ignore > - } > - try { > - pool.write(writeBuffer, socketWrapper.getSocket(), selector, > - writeTimeout, true); > - }finally { > - writeBuffer.clear(); > - if ( selector != null ) pool.put(selector); > + int left = length; > + int written = 0; > + while (left > 0) { > + int toWrite = Math.min(left, writeBuffer.remaining()); > + writeBuffer.put(src, offset, toWrite); > + > + writeBuffer.flip(); > + > + long writeTimeout = att.getWriteTimeout(); > + Selector selector = null; > + try { > + selector = pool.get(); > + } catch ( IOException x ) { > + //ignore > + } > + try { > + written = pool.write(writeBuffer, socketWrapper.getSocket(), > + selector, writeTimeout, true); > + } finally { > + writeBuffer.clear(); > + if ( selector != null ) pool.put(selector); > + } > + left -= written; > } > }
Okay, yes, this was more like what I was expecting to see. I'll give it another try. Thanks! -chris
signature.asc
Description: OpenPGP digital signature