DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26025>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26025 Jasper leaks file descriptors when checking for outdated pages Summary: Jasper leaks file descriptors when checking for outdated pages Product: Tomcat 4 Version: 4.0 Beta 1 Platform: Sun OS/Version: Solaris Status: NEW Severity: Major Priority: Other Component: Jasper AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Every time Jasper checks for modified pages, it opens a URL connection to that resource to check the modification time and never closes it. Normally it's not a problem, since the FD will be freed when the object is garbage collected. However, when running on systems with more heap and less frequent GC events, the system runs out of FDs before the GC is invoked. I noticed this problem in Jetty4.2.6, never with Tomcat. I'm providing a patch for this problem when the WAR file is extracted. When this is not the case, I don't know how to fix it. The patch follows. --- Compiler.java.orig Mon Oct 27 16:24:08 2003 +++ Compiler.java Thu Jan 8 15:17:42 2004 @@ -63,6 +63,8 @@ import java.util.*; import java.io.*; import java.net.URL; +import java.net.URLConnection; + import javax.servlet.jsp.tagext.TagInfo; import javax.servlet.ServletException; import javax.servlet.Servlet; @@ -407,7 +409,11 @@ ctxt.incrementRemoved(); return false; } - jspRealLastModified = jspUrl.openConnection().getLastModified(); + + // FIX: closes the stream to avoid FD leak + URLConnection conn = jspUrl.openConnection(); + jspRealLastModified = conn.getLastModified(); + conn.getInputStream().close(); } catch (Exception e) { e.printStackTrace(); return true; @@ -468,11 +474,15 @@ //System.out.println("Compiler: outdated, no includeUri " + include ); return true; } - if (includeUrl.openConnection().getLastModified() > - targetLastModified) { + // FIX: closes the stream to avoid FD leak + URLConnection conn = includeUrl.openConnection(); + if(conn.getLastModified() > targetLastModified) + { + conn.getInputStream().close(); //System.out.println("Compiler: outdated, include old " + include ); return true; } + conn.getInputStream().close(); } catch (Exception e) { e.printStackTrace(); return true; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]