Author: markt
Date: Sun Oct 25 13:31:48 2015
New Revision: 1710441
URL: http://svn.apache.org/viewvc?rev=1710441&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58486
Protect against two further possible memory leaks associated with XML
parsing
Modified:
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
Modified:
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java?rev=1710441&r1=1710440&r2=1710441&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
Sun Oct 25 13:31:48 2015
@@ -27,6 +27,7 @@ import java.sql.DriverManager;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
+import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@@ -38,6 +39,8 @@ import org.apache.juli.logging.LogFactor
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.compat.JreVendor;
import org.apache.tomcat.util.res.StringManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.ls.DOMImplementationLS;
/**
* Provide a workaround for known places where the Java Runtime environment can
@@ -423,15 +426,27 @@ public class JreMemoryLeakPreventionList
}
/*
- * Haven't got to the root of what is going on with this leak
- * but if a web app is the first to make the calls below the
web
- * application class loader will be pinned in memory.
+ * Various leaks related to the use of XML parsing.
*/
if (xmlParsingProtection) {
- DocumentBuilderFactory factory =
- DocumentBuilderFactory.newInstance();
+ /*
+ * Haven't got to the root of what is going on with this
+ * leak but if a web app is the first to make the following
+ * two calls the web application class loader will be
pinned
+ * in memory.
+ */
+ DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
try {
- factory.newDocumentBuilder();
+ DocumentBuilder documentBuilder =
factory.newDocumentBuilder();
+ // Bug 58486 identified two additional memory leaks.
+ // The first is in DOMSerializerImpl.abort
+ Document document = documentBuilder.newDocument();
+ document.createElement("dummy");
+ DOMImplementationLS implementation =
+
(DOMImplementationLS)document.getImplementation();
+
implementation.createLSSerializer().writeToString(document);
+ // The second leak is in DOMNormalizer
+ document.normalize();
} catch (ParserConfigurationException e) {
log.error(sm.getString("jreLeakListener.xmlParseFail"),
e);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]