It's the available() methde of the class IntermediateInputStream contained in B2CConverter. It doesn't exist in 6.0. If I comment it out in 5.5 trunk. the problem is gone.
The method was first introduced in http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/B2CConverter.java?r1=481614&r2=568699&pathrev=568699&diff_format=h and the changed to it's final contents in http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/B2CConverter.java?r1=568699&r2=569970&diff_format=h I didn't yet check, what negative consequences removing of the method has, or if there is a better implementation for it. We should carefully check the consequences of changing it w.r.t. BZ 44494 with the test webapp, we got for that BZ. Regards, Rainer Rainer Jung schrieb: > OK, cancelled my appointment. More info: > > I backported all functional changes in o.a.tomcat.util.buf from tc6.x to > tc5.5 and can't reproduce the problem any more. Those are very few > changes. I'll narrow it down some more during the next hour. Stay tuned. > > Rainer > > Rainer Jung schrieb: >> Filip Hanik - Dev Lists schrieb: >>> Thanks Rainer, I will take a look at it tonight >> Thank you! >> >> Last info chunk for today: in CoyoteAdapter.convertURI, before the >> try/catch block that either creates or recycles the B2CConverter, the >> ByteChunk bc coming from the decodedURI contains the correct URI. After >> the recycle of the B2CConverter, the ByteChunk is empty and thus we end >> up in a default redirect. >> >> Although we already read the correct URI from the request, the >> B2CConverter associated with the request detroys the already read URI in >> the recycle. I don't see the delta to 6.0. CoyoteAdapter seems fine, >> maybe in ByteChunk? >> >> Regards, >> >> Rainer >> >>> Filip >>> >>> Rainer Jung wrote: >>>> Remy Maucherat schrieb: >>>> >>>>> On Mon, 2008-08-25 at 17:16 +0200, Rainer Jung wrote: >>>>> >>>>>> If we revert the backport of >>>>>> >>>>>> http://svn.eu.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java?r1=642819&r2=647307&diff_format=h >>>>>> >>>>>> >>>>>> then the redirect loop is gone, and the usual content gets served, but >>>>>> we know, that this change was needed to fix the "remaining garbage" >>>>>> part >>>>>> of 44494. So reverting it without any alternative is not really an >>>>>> option. >>>>>> >>>>> Most likely, some backport is missing (many patches made up this input >>>>> fixes). OTOH, I don't think this particular problem is that critical, so >>>>> I would be in favor of dropping it if fixing the issue is complex. >>>>> >>>> Got some more info: >>>> >>>> 1) What happens inside the new ReadConvertor.recycle(): actually if I >>>> print out, which "superfluous" bytes are eaten by the read() loop inside >>>> ReadConvertor.recycle(), I can see, that it's all the bytes making up >>>> the PATH in the URL. If I request http://myserver:8080/, recycle read >>>> one character, namely "/", if I request http://myserver:8080/index.jsp, >>>> then recycle reads all characters from "/index.jsp". In my understanding >>>> of those patches, the time recycle in ReadConvertor gets called, those >>>> should have alrady been read and only body bytes left over after request >>>> processing should be eaten. >>>> >>>> 2) So I checked, when recycle() gets called, and I see, that during the >>>> first few (here: 2) requests it doesn't get called at all (and those >>>> work), and during the following broken requests, it gets called in the >>>> following stack: >>>> >>>> at >>>> org.apache.tomcat.util.buf.ReadConvertor.recycle(B2CConverter.java:222) >>>> at >>>> org.apache.tomcat.util.buf.B2CConverter.recycle(B2CConverter.java:64) >>>> at >>>> org.apache.catalina.connector.CoyoteAdapter.convertURI(CoyoteAdapter.java:475) >>>> >>>> at >>>> org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:265) >>>> >>>> at >>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:172) >>>> >>>> at >>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875) >>>> >>>> at >>>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) >>>> >>>> at >>>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) >>>> >>>> at >>>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) >>>> >>>> at >>>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) >>>> >>>> at java.lang.Thread.run(Thread.java:595) >>>> >>>> Didn't yet go further into it, but maybe something is wrong in >>>> CoyoteAdapter.convertURI? >>>> >>>> Regards, >>>> >>>> Rainer >>>> >>>> P.S: I'll soon need to stop investigating this for today. If anyone can >>>> take over that will be nice, because we really should have a working >>>> 5.5.27 soon. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]