You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2009/09/04 17:02:40 UTC

svn commit: r811435 - in /ant/core/trunk/src/main/org/apache/tools/ant: taskdefs/ taskdefs/compilers/ taskdefs/condition/ taskdefs/optional/ taskdefs/optional/ejb/ taskdefs/optional/javacc/ taskdefs/optional/javah/ taskdefs/optional/jsp/ taskdefs/optio...

Author: bodewig
Date: Fri Sep  4 15:02:39 2009
New Revision: 811435

URL: http://svn.apache.org/viewvc?rev=811435&view=rev
Log:
plug some more classloader leaks and mark those places where a leak remains and I don't see an obvious way to fix it

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Property.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Rmic.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/WhichResource.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/HasMethod.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/Mapper.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/XMLCatalog.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Property.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Property.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Property.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Property.java Fri Sep  4 15:02:39 2009
@@ -30,6 +30,7 @@
 import java.util.Properties;
 import java.util.Vector;
 
+import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.PropertyHelper;
@@ -558,10 +559,11 @@
         Properties props = new Properties();
         log("Resource Loading " + name, Project.MSG_VERBOSE);
         InputStream is = null;
+        ClassLoader cL = null;
+        boolean cleanup = false;
         try {
-            ClassLoader cL = null;
-
             if (classpath != null) {
+                cleanup = true;
                 cL = getProject().createClassLoader(classpath);
             } else {
                 cL = this.getClass().getClassLoader();
@@ -589,6 +591,9 @@
                     // ignore
                 }
             }
+            if (cleanup && cL != null) {
+                ((AntClassLoader) cL).cleanup();
+            }
         }
     }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Rmic.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Rmic.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Rmic.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Rmic.java Fri Sep  4 15:02:39 2009
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.rmi.Remote;
 import java.util.Vector;
+import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.Project;
@@ -104,7 +105,7 @@
 
     private Vector compileList = new Vector();
 
-    private ClassLoader loader = null;
+    private AntClassLoader loader = null;
 
     private FacadeTaskHelper facade;
     /** unable to verify message */
@@ -581,6 +582,7 @@
      * if there's a problem with baseDir or RMIC
      */
     public void execute() throws BuildException {
+        try {
         compileList.clear();
 
         File outputDir = getOutputDir();
@@ -659,6 +661,21 @@
                 }
             }
         }
+        } finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * Cleans up resources.
+     *
+     * @since Ant 1.8.0
+     */
+    protected void cleanup() {
+        if (loader != null) {
+            loader.cleanup();
+            loader = null;
+        }
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/WhichResource.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/WhichResource.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/WhichResource.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/WhichResource.java Fri Sep  4 15:02:39 2009
@@ -126,15 +126,16 @@
     public void execute() throws BuildException {
         validate();
         if (classpath != null) {
+            classpath = classpath.concatSystemClasspath("ignore");
             getProject().log("using user supplied classpath: " + classpath,
                     Project.MSG_DEBUG);
-            classpath = classpath.concatSystemClasspath("ignore");
         } else {
             classpath = new Path(getProject());
             classpath = classpath.concatSystemClasspath("only");
             getProject().log("using system classpath: " + classpath, Project.MSG_DEBUG);
         }
-        AntClassLoader loader;
+        AntClassLoader loader = null;
+        try {
         loader = AntClassLoader.newAntClassLoader(getProject().getCoreLoader(),
                     getProject(),
                     classpath, false);
@@ -160,6 +161,11 @@
             loc = url.toExternalForm();
             getProject().setNewProperty(property, loc);
         }
+        } finally {
+            if (loader != null) {
+                loader.cleanup();
+            }
+        }
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java Fri Sep  4 15:02:39 2009
@@ -152,6 +152,7 @@
                 return new Sj();
             }
             return resolveClassName(compilerType,
+                                    // Memory-Leak in line below
                                 task.getProject().createClassLoader(classpath));
         }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/HasMethod.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/HasMethod.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/HasMethod.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/HasMethod.java Fri Sep  4 15:02:39 2009
@@ -110,7 +110,6 @@
                 loader = getProject().createClassLoader(classpath);
                 loader.setParentFirst(false);
                 loader.addJavaLibraries();
-                if (loader != null) {
                     try {
                         return loader.findClass(classname);
                     } catch (SecurityException se) {
@@ -118,11 +117,9 @@
                         // actually the case we're looking for in JDK 1.3+,
                         // so catch the exception and return
                         return null;
-                    }
-                } else {
-                    return null;
                 }
             } else if (loader != null) {
+                // How do we ever get here?
                 return loader.loadClass(classname);
             } else {
                 ClassLoader l = this.getClass().getClassLoader();
@@ -148,6 +145,8 @@
         if (classname == null) {
             throw new BuildException("No classname defined");
         }
+        ClassLoader preLoadClass = loader;
+        try {
         Class clazz = loadClass(classname);
         if (method != null) {
             return isMethodFound(clazz);
@@ -156,6 +155,12 @@
             return isFieldFound(clazz);
         }
         throw new BuildException("Neither method nor field defined");
+        } finally {
+            if (preLoadClass != loader && loader != null) {
+                loader.cleanup();
+                loader = null;
+            }
+        }
     }
 
     private boolean isFieldFound(Class clazz) {

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java Fri Sep  4 15:02:39 2009
@@ -103,6 +103,8 @@
     public static final String MESSAGE_FILES_VALIDATED
         = " file(s) have been successfully validated.";
 
+    private AntClassLoader readerLoader = null;
+
     /**
      * Specify how parser error are to be handled.
      * Optional, default is <code>true</code>.
@@ -285,7 +287,7 @@
      * @throws BuildException if <code>failonerror</code> is true and an error happens
      */
     public void execute() throws BuildException {
-
+        try {
         int fileProcessed = 0;
         if (file == null && (filesets.size() == 0)) {
             throw new BuildException(
@@ -321,6 +323,9 @@
             }
         }
         onSuccessfulValidation(fileProcessed);
+        } finally {
+            cleanup();
+        }
     }
 
     /**
@@ -389,9 +394,9 @@
             try {
                 // load the parser class
                 if (classpath != null) {
-                    AntClassLoader loader =
-                        getProject().createClassLoader(classpath);
-                    readerClass = Class.forName(readerClassName, true, loader);
+                    readerLoader = getProject().createClassLoader(classpath);
+                    readerClass = Class.forName(readerClassName, true,
+                                                readerLoader);
                 } else {
                     readerClass = Class.forName(readerClassName);
                 }
@@ -432,6 +437,18 @@
     }
 
     /**
+     * Cleans up resources.
+     *
+     * @since Ant 1.8.0
+     */
+    protected void cleanup() {
+        if (readerLoader != null) {
+            readerLoader.cleanup();
+            readerLoader = null;
+        }
+    }
+
+    /**
      *
      * @return
      */

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java Fri Sep  4 15:02:39 2009
@@ -929,6 +929,7 @@
         if (combinedClasspath == null) {
             classpathLoader = getClass().getClassLoader();
         } else {
+            // Memory leak in line below
             classpathLoader
                 = getTask().getProject().createClassLoader(combinedClasspath);
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java Fri Sep  4 15:02:39 2009
@@ -679,7 +679,10 @@
         log("Looking for GenIC class in classpath: "
             + classpath.toString(), Project.MSG_VERBOSE);
 
-        AntClassLoader cl = classpath.getProject().createClassLoader(classpath);
+        AntClassLoader cl = null;
+
+        try {
+            cl = classpath.getProject().createClassLoader(classpath);
 
         try {
             cl.loadClass(JonasDeploymentTool.GENIC_CLASS);
@@ -716,6 +719,11 @@
                 + "' not found in classpath.",
             Project.MSG_VERBOSE);
         }
+        } finally {
+            if (cl != null) {
+                cl.cleanup();
+            }
+        }
         return null;
     }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java Fri Sep  4 15:02:39 2009
@@ -27,6 +27,7 @@
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.JarOutputStream;
+import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Java;
@@ -589,11 +590,9 @@
                     classpath = getCombinedClasspath();
                 }
 
+                javaTask.setFork(true);
                 if (classpath != null) {
                     javaTask.setClasspath(classpath);
-                    javaTask.setFork(true);
-                } else {
-                    javaTask.setFork(true);
                 }
 
                 log("Calling websphere.ejbdeploy for " + sourceJar.toString(),
@@ -684,6 +683,7 @@
         JarFile wasJar = null;
         File newwasJarFile = null;
         JarOutputStream newJarStream = null;
+        ClassLoader genericLoader = null;
 
         try {
             log("Checking if websphere Jar needs to be rebuilt for jar "
@@ -713,7 +713,7 @@
                 }
 
                 //Cycle Through generic and make sure its in websphere
-                ClassLoader genericLoader = getClassLoaderFromJar(genericJarFile);
+                genericLoader = getClassLoaderFromJar(genericJarFile);
 
                 for (Enumeration e = genericEntries.keys(); e.hasMoreElements();) {
                     String filepath = (String) e.nextElement();
@@ -861,6 +861,11 @@
                     rebuild = true;
                 }
             }
+            if (genericLoader != null
+                && genericLoader instanceof AntClassLoader) {
+                AntClassLoader loader = (AntClassLoader) genericLoader;
+                loader.cleanup();
+            }
         }
 
         return rebuild;
@@ -889,4 +894,3 @@
         return getTask().getProject().createClassLoader(lookupPath);
     }
 }
-

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java Fri Sep  4 15:02:39 2009
@@ -411,7 +411,9 @@
         String packagePrefix = null;
         String mainClass = null;
 
-        AntClassLoader l =
+        AntClassLoader l = null;
+        try {
+            l =
             AntClassLoader.newAntClassLoader(null, null,
                                              path
                                              .concatSystemClasspath("ignore"),
@@ -483,6 +485,11 @@
             throw new BuildException("unknown task type " + type);
         }
         return packagePrefix + mainClass;
+        } finally {
+            if (l != null) {
+                l.cleanup();
+            }
+        }
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java Fri Sep  4 15:02:39 2009
@@ -86,6 +86,7 @@
             return new SunJavah();
         } else if (choice != null) {
             return resolveClassName(choice,
+                                    // Memory leak in line below
                                     log.getProject()
                                     .createClassLoader(classpath));
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java Fri Sep  4 15:02:39 2009
@@ -22,6 +22,7 @@
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.Vector;
+import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.Project;
@@ -436,10 +437,12 @@
 
         File dest = getActualDestDir();
 
+        AntClassLoader al = null;
+        try {
         //bind to a compiler
         JspCompilerAdapter compiler =
             JspCompilerAdapterFactory.getCompiler(compilerName, this,
-                getProject().createClassLoader(compilerClasspath));
+                al = getProject().createClassLoader(compilerClasspath));
 
         //if we are a webapp, hand off to the compiler, which had better handle it
         if (webApp != null) {
@@ -503,6 +506,11 @@
                 log("all files are up to date", Project.MSG_VERBOSE);
             }
         }
+        } finally {
+            if (al != null) {
+                al.cleanup();
+            }
+        }
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java Fri Sep  4 15:02:39 2009
@@ -54,6 +54,7 @@
     public static JspCompilerAdapter getCompiler(String compilerType, Task task)
         throws BuildException {
         return getCompiler(compilerType, task,
+                           // Memory-Leak in line below
                            task.getProject().createClassLoader(null));
     }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java Fri Sep  4 15:02:39 2009
@@ -1108,7 +1108,9 @@
         if (!cmd.haveClasspath()) {
             return;
         }
-        AntClassLoader loader = AntClassLoader.newAntClassLoader(null,
+        AntClassLoader loader = null;
+        try {
+            loader = AntClassLoader.newAntClassLoader(null,
             getProject(), cmd.createClasspath(getProject()),
             true);
         String projectResourceName = LoaderUtils.classNameToResource(
@@ -1131,6 +1133,11 @@
         } catch (Exception ex) {
             // Ignore exception
         }
+        } finally {
+            if (loader != null) {
+                loader.cleanup();
+            }
+        }
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java Fri Sep  4 15:02:39 2009
@@ -86,6 +86,7 @@
             return new SunNative2Ascii();
         } else if (choice != null) {
             return resolveClassName(choice,
+                                    // Memory leak in line below
                                     log.getProject()
                                     .createClassLoader(classpath));
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java Fri Sep  4 15:02:39 2009
@@ -118,6 +118,7 @@
         }
         //no match? ask for the non-lower-cased type
         return resolveClassName(rmicType,
+                                // Memory leak in line below
                                 task.getProject().createClassLoader(classpath));
     }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/Mapper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/Mapper.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/Mapper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/Mapper.java Fri Sep  4 15:02:39 2009
@@ -261,6 +261,7 @@
 
         ClassLoader loader = (classpath == null)
             ? getClass().getClassLoader()
+            // Memory leak in line below
             : getProject().createClassLoader(classpath);
 
         return Class.forName(cName, true, loader);

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/XMLCatalog.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/XMLCatalog.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/XMLCatalog.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/XMLCatalog.java Fri Sep  4 15:02:39 2009
@@ -500,7 +500,7 @@
         if (catalogResolver == null) {
 
             AntClassLoader loader = null;
-
+            // Memory-Leak in line below
             loader = getProject().createClassLoader(Path.systemClasspath);
 
             try {

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java Fri Sep  4 15:02:39 2009
@@ -65,6 +65,7 @@
                 if (classpath == null) {
                     c = Class.forName(classname);
                 } else {
+                    // Memory-Leak in line below
                     AntClassLoader al
                             = getProject().createClassLoader(classpath);
                     c = Class.forName(classname, true, al);

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java?rev=811435&r1=811434&r2=811435&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java Fri Sep  4 15:02:39 2009
@@ -646,6 +646,7 @@
                 // the usual classloader
                 ? getClass().getClassLoader()
                 // additional use the provided classpath
+                // Memory leak in line below
                 : getProject().createClassLoader(classpath);
         }
         return myClassLoader;