TC 3.2.1 seems fixed.

I just take a look at code and saw that the finished = true;
is present in org.apache.tomcat.service.connector.Ajp13ConnectorResponse !-)

    public void finish() throws IOException 
    {
        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);
        }
    }
    
And before the send which may safer, so my code come to =>

     public void finish() throws IOException
     {
         if(!finished) {
             finished = true;
             super.finish();
             ajp13.finish();
         }
     }

On ne peut résoudre les problèmes les plus graves avec le même esprit qui
les a crées.
-- Albert Einstein 

>-----Original Message-----
>From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]]
>Sent: Saturday, February 03, 2001 3:28 AM
>To: [EMAIL PROTECTED]
>Cc: [EMAIL PROTECTED]; Dan Milstein
>Subject: Re: [BUG 235] ajp13 and RequestDispatcher.forward() gotcha !
>
>
>GOMEZ Henri wrote:
>
>> It's late but I found it.
>>
>> After some ethereal dumps I noticed that the finish method in
>> org.apache.tomcat.modules.server.Ajp13Interceptor is called 2 times
>> when using forward and so we sent 2 time the END_OF_RESPONSE to
>> the Apache Web Server.
>>
>> So Apache (depending on reqs rate and load) will get the 2nd
>> END_OF_RESPONSE just after sending the next request to tomcat.
>> And it will return a NO RESPONSE to browser
>>
>
>I recall a similar bug report (and associated fix for 3.2) some time
>after 3.2b6.  You might want to browse back through the CVS commits for
>November if you want to forward port the fix.
>
>Craig
>
>
>>
>> I think Costin will find quickly where the problem come from
>> (two calls to finish() but a quick hack could be to add
>> finished = true in finish() :
>>
>> =>
>>
>>     public void finish() throws IOException
>>     {
>>         if(!finished) {
>>             super.finish();
>>             ajp13.finish();
>>             finished = true;
>>         }
>>     }
>> <=
>>
>> Just think that recycle() reset finished to false ;-(
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, email: [EMAIL PROTECTED]
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, email: [EMAIL PROTECTED]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to