Author: markt
Date: Tue May 29 13:06:24 2012
New Revision: 1343708
URL: http://svn.apache.org/viewvc?rev=1343708&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53081
Do not always cache resources loaded by the web application class loader
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1343708&r1=1343707&r2=1343708&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Tue May
29 13:06:24 2012
@@ -2945,6 +2945,7 @@ public class WebappClassLoader
int contentLength = -1;
InputStream binaryStream = null;
+ boolean isClassResource = path.endsWith(".class");
int jarFilesLength = jarFiles.length;
int repositoriesLength = repositories.length;
@@ -3146,7 +3147,20 @@ public class WebappClassLoader
return null;
}
- if (binaryStream != null) {
+ /* Only cache the binary content if there is some content
+ * available and either:
+ * a) It is a class file since the binary content is only
cached
+ * until the class has been loaded
+ * or
+ * b) The file needs conversion to address encoding issues (see
+ * below)
+ *
+ * In all other cases do not cache the content to prevent
+ * excessive memory usage if large resources are present (see
+ * https://issues.apache.org/bugzilla/show_bug.cgi?id=53081).
+ */
+ if (binaryStream != null &&
+ (isClassResource || fileNeedConvert)) {
byte[] binaryContent = new byte[contentLength];
@@ -3248,8 +3262,15 @@ public class WebappClassLoader
if (entry != null) {
if (entry.binaryContent != null)
return new ByteArrayInputStream(entry.binaryContent);
+ else {
+ try {
+ return entry.source.openStream();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
}
- return (null);
+ return null;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]