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: [email protected]
For additional commands, e-mail: [email protected]