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)