You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@locus.apache.org on 2000/11/28 22:36:59 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/service/connector Ajp13ConnectorResponse.java
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 <dc...@tanning.com>
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)