Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51395
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 23 Jun 2011 09:26:10 +0000 (09:26 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 23 Jun 2011 09:26:10 +0000 (09:26 +0000)
Better fix for memory leak that aligns ContextConfig with TldConfig

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1138788 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/startup/ContextConfig.java
java/org/apache/catalina/startup/TldConfig.java

index 7990d18..4f3a104 100644 (file)
@@ -484,6 +484,8 @@ public class ContextConfig
                         namespaceAware, webRuleSet);
                 webFragmentDigesters[0] = DigesterFactory.newDigester(validation,
                         namespaceAware, webFragmentRuleSet);
+                webDigesters[0].getParser();
+                webFragmentDigesters[0].getParser();
             }
             webDigester = webDigesters[0];
             webFragmentDigester = webFragmentDigesters[0];
@@ -494,6 +496,8 @@ public class ContextConfig
                         namespaceAware, webRuleSet);
                 webFragmentDigesters[1] = DigesterFactory.newDigester(validation,
                         namespaceAware, webFragmentRuleSet);
+                webDigesters[1].getParser();
+                webFragmentDigesters[1].getParser();
             }
             webDigester = webDigesters[1];
             webFragmentDigester = webFragmentDigesters[1];
@@ -504,6 +508,8 @@ public class ContextConfig
                         namespaceAware, webRuleSet);
                 webFragmentDigesters[2] = DigesterFactory.newDigester(validation,
                         namespaceAware, webFragmentRuleSet);
+                webDigesters[2].getParser();
+                webFragmentDigesters[2].getParser();
             }
             webDigester = webDigesters[2];
             webFragmentDigester = webFragmentDigesters[2];
@@ -514,6 +520,8 @@ public class ContextConfig
                         namespaceAware, webRuleSet);
                 webFragmentDigesters[3] = DigesterFactory.newDigester(validation,
                         namespaceAware, webFragmentRuleSet);
+                webDigesters[3].getParser();
+                webFragmentDigesters[3].getParser();
             }
             webDigester = webDigesters[3];
             webFragmentDigester = webFragmentDigesters[3];
@@ -842,6 +850,9 @@ public class ContextConfig
         
         contextConfig();
         
+        createWebXmlDigester(context.getXmlNamespaceAware(),
+                context.getXmlValidation());
+
         try {
             fixDocBase();
         } catch (IOException e) {
@@ -878,8 +889,6 @@ public class ContextConfig
                     Boolean.valueOf(context.getXmlNamespaceAware())));
         }
         
-        createWebXmlDigester(context.getXmlNamespaceAware(), context.getXmlValidation());
-        
         webConfig();
 
         if (!context.getIgnoreAnnotations()) {
index 5597c65..b05f48c 100644 (file)
@@ -90,24 +90,28 @@ public final class TldConfig  implements LifecycleListener {
             if (tldDigesters[0] == null) {
                 tldDigesters[0] = DigesterFactory.newDigester(validation,
                         namespaceAware, new TldRuleSet());
+                tldDigesters[0].getParser();
             }
             digester = tldDigesters[0];
         } else if (!namespaceAware && validation) {
             if (tldDigesters[1] == null) {
                 tldDigesters[1] = DigesterFactory.newDigester(validation,
                         namespaceAware, new TldRuleSet());
+                tldDigesters[1].getParser();
             }
             digester = tldDigesters[1];
         } else if (namespaceAware && !validation) {
             if (tldDigesters[2] == null) {
                 tldDigesters[2] = DigesterFactory.newDigester(validation,
                         namespaceAware, new TldRuleSet());
+                tldDigesters[2].getParser();
             }
             digester = tldDigesters[2];
         } else {
             if (tldDigesters[3] == null) {
                 tldDigesters[3] = DigesterFactory.newDigester(validation,
                         namespaceAware, new TldRuleSet());
+                tldDigesters[3].getParser();
             }
             digester = tldDigesters[3];
         }