* End message array.
*/
protected static final byte[] endMessageArray;
+ protected static final byte[] endAndCloseMessageArray;
/**
System.arraycopy(endMessage.getBuffer(), 0, endMessageArray, 0,
endMessage.getLen());
+ // Allocate the end and close message array
+ AjpMessage endAndCloseMessage = new AjpMessage(16);
+ endAndCloseMessage.reset();
+ endAndCloseMessage.appendByte(Constants.JK_AJP13_END_RESPONSE);
+ endAndCloseMessage.appendByte(0);
+ endAndCloseMessage.end();
+ endAndCloseMessageArray = new byte[endAndCloseMessage.getLen()];
+ System.arraycopy(endAndCloseMessage.getBuffer(), 0, endAndCloseMessageArray, 0,
+ endAndCloseMessage.getLen());
+
// Allocate the flush message array
AjpMessage flushMessage = new AjpMessage(16);
flushMessage.reset();
finished = true;
// Add the end message
- if (outputBuffer.position() + endMessageArray.length > outputBuffer.capacity()) {
+ byte[] messageArray;
+ if (error) {
+ messageArray = endAndCloseMessageArray;
+ } else {
+ messageArray = endMessageArray;
+ }
+ if (outputBuffer.position() + messageArray.length > outputBuffer.capacity()) {
flush(false);
}
- outputBuffer.put(endMessageArray);
+ outputBuffer.put(messageArray);
flush(false);
}
finished = true;
// Add the end message
- output(endMessageArray, 0, endMessageArray.length);
+ byte[] messageArray;
+ if (error) {
+ messageArray = endAndCloseMessageArray;
+ } else {
+ messageArray = endMessageArray;
+ }
+ output(messageArray, 0, messageArray.length);
}
Ensure that when using sendfile, HTTP APR sockets are not added to
multiple pollers. This may cause errors during shutdown. (markt)
</fix>
+ <update>
+ Set <code>reuse</code> flag of final AJP <code>END_RESPONSE</code>
+ packet to <code>0</code> if we plan to close the connection. (rjung)
+ </update>
</changelog>
</subsection>
<subsection name="Jasper">