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