Author: markt
Date: Mon Jun 20 19:26:45 2011
New Revision: 1137753

URL: http://svn.apache.org/viewvc?rev=1137753&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51395
Fix memory leak triggered when an application that includes a SAXParserFactory 
is the first web application to be loaded.

Modified:
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1137753&r1=1137752&r2=1137753&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Mon Jun 20 
19:26:45 2011
@@ -229,6 +229,32 @@ public class ContextConfig
                                 new LoginConfig("NONE", null, null, null);
 
 
+    static {
+        webDigesters[0] = DigesterFactory.newDigester(false, false, 
webRuleSet);
+        webDigesters[0].getParser();
+        webFragmentDigesters[0] = DigesterFactory.newDigester(false, false,
+                webFragmentRuleSet);
+        webFragmentDigesters[0].getParser();
+
+        webDigesters[1] = DigesterFactory.newDigester(true, false, webRuleSet);
+        webDigesters[1].getParser();
+        webFragmentDigesters[1] = DigesterFactory.newDigester(true, false,
+                webFragmentRuleSet);
+        webFragmentDigesters[1].getParser();
+
+        webDigesters[2] = DigesterFactory.newDigester(false, true, webRuleSet);
+        webDigesters[2].getParser();
+        webFragmentDigesters[2] = DigesterFactory.newDigester(false, true,
+                webFragmentRuleSet);
+        webFragmentDigesters[2].getParser();
+
+        webDigesters[3] = DigesterFactory.newDigester(true, true, webRuleSet);
+        webDigesters[3].getParser();
+        webFragmentDigesters[3] = DigesterFactory.newDigester(true, true,
+                webFragmentRuleSet);
+        webFragmentDigesters[3].getParser();
+    }
+
     // ------------------------------------------------------------- Properties
 
 
@@ -475,46 +501,22 @@ public class ContextConfig
      * Create (if necessary) and return a Digester configured to process the
      * web application deployment descriptor (web.xml).
      */
-    public void createWebXmlDigester(boolean namespaceAware,
+    protected void createWebXmlDigester(boolean namespaceAware,
             boolean validation) {
         
         if (!namespaceAware && !validation) {
-            if (webDigesters[0] == null) {
-                webDigesters[0] = DigesterFactory.newDigester(validation,
-                        namespaceAware, webRuleSet);
-                webFragmentDigesters[0] = 
DigesterFactory.newDigester(validation,
-                        namespaceAware, webFragmentRuleSet);
-            }
             webDigester = webDigesters[0];
             webFragmentDigester = webFragmentDigesters[0];
             
         } else if (!namespaceAware && validation) {
-            if (webDigesters[1] == null) {
-                webDigesters[1] = DigesterFactory.newDigester(validation,
-                        namespaceAware, webRuleSet);
-                webFragmentDigesters[1] = 
DigesterFactory.newDigester(validation,
-                        namespaceAware, webFragmentRuleSet);
-            }
             webDigester = webDigesters[1];
             webFragmentDigester = webFragmentDigesters[1];
             
         } else if (namespaceAware && !validation) {
-            if (webDigesters[2] == null) {
-                webDigesters[2] = DigesterFactory.newDigester(validation,
-                        namespaceAware, webRuleSet);
-                webFragmentDigesters[2] = 
DigesterFactory.newDigester(validation,
-                        namespaceAware, webFragmentRuleSet);
-            }
             webDigester = webDigesters[2];
             webFragmentDigester = webFragmentDigesters[2];
             
         } else {
-            if (webDigesters[3] == null) {
-                webDigesters[3] = DigesterFactory.newDigester(validation,
-                        namespaceAware, webRuleSet);
-                webFragmentDigesters[3] = 
DigesterFactory.newDigester(validation,
-                        namespaceAware, webFragmentRuleSet);
-            }
             webDigester = webDigesters[3];
             webFragmentDigester = webFragmentDigesters[3];
         }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1137753&r1=1137752&r2=1137753&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Jun 20 19:26:45 2011
@@ -85,6 +85,11 @@
         include leading zeros and formatting any parameters present.
         (kolinko/markt)
       </fix>
+      <fix>
+        <bug>51395</bug>: Fix memory leak triggered when an application that
+        includes a SAXParserFactory is the first web application to be loaded.
+        (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to