Author: markt
Date: Tue Jun 16 19:13:38 2015
New Revision: 1685891

URL: http://svn.apache.org/r1685891
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58023
Fix potentially excessive memory usage due to unnecessary caching of JAR 
manifests.

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java

Modified: 
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1685891&r1=1685890&r2=1685891&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Tue 
Jun 16 19:13:38 2015
@@ -153,15 +153,17 @@ public abstract class WebappClassLoaderB
 
         protected final String name;
         protected final String path;
+        protected final boolean manifestRequired;
 
-        PrivilegedFindResourceByName(String name, String path) {
+        PrivilegedFindResourceByName(String name, String path, boolean 
manifestRequired) {
             this.name = name;
             this.path = path;
+            this.manifestRequired = manifestRequired;
         }
 
         @Override
         public ResourceEntry run() {
-            return findResourceInternal(name, path);
+            return findResourceInternal(name, path, manifestRequired);
         }
 
     }
@@ -930,10 +932,10 @@ public abstract class WebappClassLoaderB
         if (entry == null) {
             if (securityManager != null) {
                 PrivilegedAction<ResourceEntry> dp =
-                    new PrivilegedFindResourceByName(name, path);
+                    new PrivilegedFindResourceByName(name, path, false);
                 entry = AccessController.doPrivileged(dp);
             } else {
-                entry = findResourceInternal(name, path);
+                entry = findResourceInternal(name, path, false);
             }
         }
         if (entry != null) {
@@ -2403,10 +2405,10 @@ public abstract class WebappClassLoaderB
 
         if (securityManager != null) {
             PrivilegedAction<ResourceEntry> dp =
-                new PrivilegedFindResourceByName(name, path);
+                new PrivilegedFindResourceByName(name, path, true);
             entry = AccessController.doPrivileged(dp);
         } else {
-            entry = findResourceInternal(name, path);
+            entry = findResourceInternal(name, path, true);
         }
 
         if (entry == null) {
@@ -2526,7 +2528,8 @@ public abstract class WebappClassLoaderB
      *
      * @return the loaded resource, or null if the resource isn't found
      */
-    protected ResourceEntry findResourceInternal(final String name, final 
String path) {
+    protected ResourceEntry findResourceInternal(final String name, final 
String path,
+            boolean manifestRequired) {
 
         checkStateForResourceLoading(name);
 
@@ -2600,7 +2603,10 @@ public abstract class WebappClassLoaderB
                 entry.certificates = resource.getCertificates();
             }
         }
-        entry.manifest = resource.getManifest();
+
+        if (manifestRequired) {
+            entry.manifest = resource.getManifest();
+        }
 
         if (isClassResource && entry.binaryContent != null &&
                 this.transformers.size() > 0) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to