Author: remy.maucherat(a)jboss.com
Date: 2008-03-05 13:32:31 -0500 (Wed, 05 Mar 2008)
New Revision: 473
Modified:
trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
Log:
- Fix a glitch in flushLeftover, which probably does not happen in the real world.
- Cleanup.
Modified: trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
===================================================================
--- trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java 2008-03-05 17:02:58
UTC (rev 472)
+++ trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java 2008-03-05 18:32:31
UTC (rev 473)
@@ -743,16 +743,19 @@
}
//System.out.println("Flushed leftover " + res);
response.setLastWrite(res);
- bbuf.clear();
if (pos < end) {
// Could not write all leftover data: put back to write poller
- leftover.setOffset(start + pos);
+ leftover.setOffset(start);
+ bbuf.position(pos);
return false;
+ } else {
+ bbuf.clear();
}
}
if (thisTime > bbuf.capacity() - bbuf.position()) {
thisTime = bbuf.capacity() - bbuf.position();
}
+ //System.out.println("Put " + thisTime + " bytes from
leftover");
bbuf.put(b, start, thisTime);
len = len - thisTime;
start = start + thisTime;
@@ -810,9 +813,10 @@
res = Socket.send(socket, leftover.getBuffer(), leftover.getOffset(),
leftover.getEnd());
leftover.recycle();
// Send current buffer
- if (res > 0) {
+ if (res > 0 && bbuf.position() > 0) {
res = Socket.sendbb(socket, 0, bbuf.position());
}
+ bbuf.clear();
Socket.timeoutSet(socket, 0);
} else {
throw new IOException("Backlog");
@@ -826,7 +830,7 @@
int pos = 0;
int end = bbuf.position();
while (pos < end) {
- res = Socket.sendibb(socket, pos, bbuf.position());
+ res = Socket.sendibb(socket, pos, end);
//if (res == 0) System.out.println("Wrote 0 bytes");
if (res > 0) {
pos += res;
@@ -840,7 +844,7 @@
//System.out.println("Blocking write of all data");
// Switch to blocking mode and write the data
Socket.timeoutSet(socket, endpoint.getSoTimeout() * 1000);
- res = Socket.sendbb(socket, 0, bbuf.position());
+ res = Socket.sendbb(socket, 0, end);
Socket.timeoutSet(socket, 0);
} else {
// Put any leftover bytes in the leftover byte chunk
Show replies by date