You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2001/03/10 06:32:07 UTC

[Bug 316] New - AdaptiveClassLoader leaks file descriptors BugRat Report#575

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=316

*** shadow/316	Fri Mar  9 21:32:06 2001
--- shadow/316.tmp.13617	Fri Mar  9 21:32:07 2001
***************
*** 0 ****
--- 1,52 ----
+ +============================================================================+
+ | AdaptiveClassLoader leaks file descriptors BugRat Report#575               |
+ +----------------------------------------------------------------------------+
+ |        Bug #: 316                         Product: Tomcat 3                |
+ |       Status: UNCONFIRMED                 Version: 3.2.1 Final             |
+ |   Resolution:                            Platform: All                     |
+ |     Severity: Normal                   OS/Version: All                     |
+ |     Priority: High                      Component: Servlet                 |
+ +----------------------------------------------------------------------------+
+ |  Assigned To: Larry.Isaacs@sas.com                                         |
+ |  Reported By: bartlejd@together.net                                        |
+ |      CC list: Cc:                                                          |
+ +----------------------------------------------------------------------------+
+ |          URL:                                                              |
+ +============================================================================+
+ |                              DESCRIPTION                                   |
+ Under JDK 1.1.8, the AdaptiveClassLoader leaks file 
+ descriptors from the getResource method.  This gets invoked
+ ( among other times ) every time Beans.instantiate is called
+ with the servlet classloader instead of null ( it tries to
+ find a serialized bean before creating a default instance ).
+ The ZipFile object used to look in jars found in the 
+ repository list is never explicitly closed ( and the finalize
+ method doesn't seem to do it either ).  The solution is
+ to close the ZipFile in a finally block.  Each time this 
+ method runs and searches a zip file ( or jar ), it will leak
+ one file descriptor for each file it processes ( we have 10
+ jars in our WEB-INF/lib so that's 10 file descriptors for 
+ each hit to a page with one jsp:useBean ).  A patch follows:
+ 
+ --- jakarta-tomcat-3.2.orig/src/org/apache/tomcat/loader/AdaptiveClassLoader.java       Wed Nov 29 20:47:52 2000
+ +++ jakarta-tomcat-3.2/src/org/apache/tomcat/loader/AdaptiveClassLoader.java    Tue Dec 12 13:47:05 2000
+ @@ -804,8 +804,9 @@
+                  // a jar:-URL *could* change even between minor releases, but
+                  // didn't between JVM's 1.1.6 and 1.3beta. Tested on JVM's from
+                  // IBM, Blackdown, Microsoft, Sun @ Windows and Sun @ Solaris
+ +                ZipFile zf = null;
+                  try {
+ -                    ZipFile zf = new ZipFile(file.getAbsolutePath());
+ +                    zf = new ZipFile(file.getAbsolutePath());
+                      ZipEntry ze = zf.getEntry(name);
+  
+                      if (ze != null) {
+ @@ -819,6 +820,8 @@
+                  } catch (IOException ioe) {
+                      ioe.printStackTrace();
+                      return null;
+ +                } finally {
+ +                    if ( zf != null ) try { zf.close(); } catch ( IOException e ) { } 
+                  }
+              }   
+          }

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, email: tomcat-dev-help@jakarta.apache.org