craigmcc 00/11/28 13:36:56 Modified: src/share/org/apache/tomcat/service/connector Tag: tomcat_32 Ajp13ConnectorResponse.java Log: Correct protocol handling for AJP13 so that a JK_AJP13_END_RESPONSE message gets generated only once, even when RequestDispatcher.forward() was called. From the analysis submitted with the patch by Doug Clinton: RequestDispatcher.forward() calls realResponse.finish() as its final action. However, ContextManager.service() also calls finish() on the response which results in two packets of type JK_AJP13_END_RESPONSE being written back to the mod_jk stream. This means that the next time mod_jk makes a request the first thing it will get back from tomcat is the second END_RESPONSE packet. The real response to the request gets left, buffered in the socket stream. I have studied this, and I cannot see that it causes any potential regression issues. Could people who have CVS access please check out the revised code and make sure that I got everything right? Submitted by: Doug Clinton <[EMAIL PROTECTED]> Revision Changes Path No revision No revision 1.4.2.2 +16 -10 jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Ajp13ConnectorResponse.java Index: Ajp13ConnectorResponse.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Ajp13ConnectorResponse.java,v retrieving revision 1.4.2.1 retrieving revision 1.4.2.2 diff -u -r1.4.2.1 -r1.4.2.2 --- Ajp13ConnectorResponse.java 2000/07/27 18:13:20 1.4.2.1 +++ Ajp13ConnectorResponse.java 2000/11/28 21:36:51 1.4.2.2 @@ -1,8 +1,8 @@ /* - * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Ajp13ConnectorResponse.java,v 1.4.2.1 2000/07/27 18:13:20 costin Exp $ - * $Revision: 1.4.2.1 $ - * $Date: 2000/07/27 18:13:20 $ + * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Ajp13ConnectorResponse.java,v 1.4.2.2 2000/11/28 21:36:51 craigmcc Exp $ + * $Revision: 1.4.2.2 $ + * $Date: 2000/11/28 21:36:51 $ * * ==================================================================== * @@ -97,6 +97,8 @@ MsgConnector con; + private boolean finished = false; + public Ajp13ConnectorResponse() { } @@ -148,13 +150,16 @@ public void finish() throws IOException { - super.finish(); - MsgBuffer msg = con.getMsgBuffer(); - msg.reset(); - msg.appendByte(JK_AJP13_END_RESPONSE); - msg.appendByte((byte)1); - msg.end(); - con.send(msg); + if (!finished) { + super.finish(); + finished = true; + MsgBuffer msg = con.getMsgBuffer(); + msg.reset(); + msg.appendByte(JK_AJP13_END_RESPONSE); + msg.appendByte((byte)1); + msg.end(); + con.send(msg); + } } protected int headerNameToSc(String name) @@ -210,6 +215,7 @@ public void recycle() { super.recycle(); + finished = false; } public void setConnector(MsgConnector con)