Hello Tomcat Users and Committers, [duplicate as first msg got formatted 
incorrectly]Platform: Tomcat 4.1.24, Linux ES 2.1, jdk1.4.1.06Here is a snippet 
of the stack trace we regularly in our Tomcat 4.1.24 logs.----- Root Cause 
-----java.lang.IllegalStateException: getOutputStream() has already been called 
for this response        at 
org.apache.catalina.connector.ResponseBase.getWriter(ResponseBase.java:756)     
   at 
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:174) 
       at 
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:173)        
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:166)  
      at 
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:184)     
   at 
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:198)
        at 
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:193)
        at 
org.apache.jsp.ViewAttachment_jsp._jspService(ViewAttachment_jsp.java:76)We 
intend to migrate to Tomcat 5.x later this year.  In the interim, we recently 
linked this exception event to leaked memory.  That is, the 
PageContextImpl.release() method (6th from top in stack trace above, body 
below) never completes as it does not catch the IllegalStateException that 
happens when ResponseBase.getWriter()is called in the scope of 2nd  
flushBuffer() call below.See org.apache.jasper.runtime.PageContextImpl:public 
void release() {    out = baseOut;    try {        if (isIncluded) {            
((JspWriterImpl)out).flushBuffer();            // push it into the including 
jspWriter        } else {            // Do not flush the buffer even if we're 
not included (i.e.            // we are the main page. The servlet will flush 
it and close            // the stream.            
((JspWriterImpl)out).flushBuffer();        }} catch (IOException ex) {    
loghelper.log("Internal error flushing the buffer in release()");}servlet      
= null;config           = null;context          = null;needsSession = 
false;errorPageURL = null;bufferSize   = JspWriter.DEFAULT_BUFFER;autoFlush    
= true;request      = null;response     = null;       depth = 
-1;baseOut.recycle();session      = null;attributes.clear();}The 2nd last line 
above, session=null is skipped because of the uncaught exception, which creates 
a problem since a session so referenced becomes ineligible for garbage 
collection after processing the request.Does anyone know:a) is this a 
documented limitation (I read 102 matches for ‘memory leak’ on the Tomcat 
4.1 list archives, but I did not find this exact problem, except for an entry 
in the 4.1 release notes where it is reported fixed in 4.1.20).b) is there a 
patch available to fix this in Tomcat 4.x?Thanks very much for your time,Matthew

Reply via email to