Index: .classpath
===================================================================
--- .classpath (revision 488761)
+++ .classpath (working copy)
@@ -12,7 +12,7 @@
-
+
Index: catalina/src/share/org/apache/catalina/core/StandardContext.java
===================================================================
--- catalina/src/share/org/apache/catalina/core/StandardContext.java (revision 488761)
+++ catalina/src/share/org/apache/catalina/core/StandardContext.java (working copy)
@@ -178,7 +178,10 @@
*/
private boolean antiJARLocking = false;
-
+ /**
+ * The nullifyReferences flag for this Context.
+ */
+ private boolean nullifyReferences = true;
/**
* The antiResourceLocking flag for this Context.
*/
@@ -875,7 +878,23 @@
return (this.antiResourceLocking);
}
+ /**
+ * @param flag The nullInstanceFields to set.
+ */
+ public void setNullifyReferences(boolean flag) {
+ boolean oldNullInstanceFields = this.nullifyReferences;
+ this.nullifyReferences = flag;
+ support.firePropertyChange("nullifyReferences",
+ new Boolean(oldNullInstanceFields),
+ new Boolean(this.nullifyReferences));
+ }
+ /**
+ * @return Returns the nullInstanceFields.
+ */
+ public boolean getNullifyReferences() {
+ return nullifyReferences;
+ }
/**
* Set the antiJARLocking feature for this Context.
Index: catalina/src/share/org/apache/catalina/loader/WebappLoader.java
===================================================================
--- catalina/src/share/org/apache/catalina/loader/WebappLoader.java (revision 488761)
+++ catalina/src/share/org/apache/catalina/loader/WebappLoader.java (working copy)
@@ -667,9 +667,10 @@
classLoader = createClassLoader();
classLoader.setResources(container.getResources());
classLoader.setDelegate(this.delegate);
- if (container instanceof StandardContext)
+ if (container instanceof StandardContext){
classLoader.setAntiJARLocking(((StandardContext) container).getAntiJARLocking());
-
+ classLoader.setNullifyReferences(((StandardContext) container).getNullifyReferences());
+ }
for (int i = 0; i < repositories.length; i++) {
classLoader.addRepository(repositories[i]);
}
Index: catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
===================================================================
--- catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java (revision 488761)
+++ catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java (working copy)
@@ -168,6 +168,11 @@
*/
boolean antiJARLocking = false;
+ /**
+ * Set static fields of loaded classes to null when undeploying to prevent
+ * memory leaks.
+ */
+ boolean nullifyReferences = true;
// ----------------------------------------------------------- Constructors
@@ -424,15 +429,29 @@
return antiJARLocking;
}
-
- /**
+ /**
* @param antiJARLocking The antiJARLocking to set.
*/
public void setAntiJARLocking(boolean antiJARLocking) {
this.antiJARLocking = antiJARLocking;
}
+
+ /**
+ * @param flag The nullifyReferences to set.
+ */
+ public void setNullifyReferences(boolean flag) {
+ this.nullifyReferences = flag;
+ }
+ /**
+ * @return Returns the nullifyReferences.
+ */
+ public boolean getNullifyReferences() {
+ return nullifyReferences;
+ }
+
+
/**
* If there is a Java SecurityManager create a read FilePermission
* or JndiPermission for the file directory path.
@@ -1587,6 +1606,7 @@
}
}
+ if(nullifyReferences) {
// Null out any static or final fields from loaded classes,
// as a workaround for apparent garbage collection bugs
Iterator loadedClasses = ((HashMap) resourceEntries.clone()).values().iterator();
@@ -1633,7 +1653,7 @@
}
}
}
-
+ }
// Remove entries for this webapp from the JSP EL BeanInfo cache
cleanElCache();