From 8d4197a222dae2279657d9765a8869d45d0c768d Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Wed, 23 Jun 2004 14:08:26 +0000 Subject: [PATCH] Preliminary fix for 8689 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276617 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tools/ant/taskdefs/Ant.java | 30 ++++++++++++++++--- .../tools/ant/taskdefs/RecorderEntry.java | 11 +++++-- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Ant.java b/src/main/org/apache/tools/ant/taskdefs/Ant.java index 4d49898eb..b19a20a11 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Ant.java +++ b/src/main/org/apache/tools/ant/taskdefs/Ant.java @@ -24,9 +24,11 @@ import java.io.PrintStream; import java.lang.reflect.Method; import java.util.Enumeration; import java.util.Hashtable; +import java.util.Iterator; import java.util.Vector; import java.util.Set; import java.util.HashSet; +import org.apache.tools.ant.AntClassLoader; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildListener; import org.apache.tools.ant.DefaultLogger; @@ -147,10 +149,9 @@ public class Ant extends Task { private void initializeProject() { newProject.setInputHandler(getProject().getInputHandler()); - Vector listeners = getProject().getBuildListeners(); - final int count = listeners.size(); - for (int i = 0; i < count; i++) { - newProject.addBuildListener((BuildListener) listeners.elementAt(i)); + Iterator iter = getBuildListeners(); + while (iter.hasNext()) { + newProject.addBuildListener((BuildListener) iter.next()); } if (output != null) { @@ -390,6 +391,20 @@ public class Ant extends Task { } } finally { // help the gc + Iterator iter = getBuildListeners(); + while (iter.hasNext()) { + newProject.removeBuildListener((BuildListener) iter.next()); + } + iter = newProject.getBuildListeners().iterator(); + while (iter.hasNext()) { + Object o = iter.next(); + if (o instanceof RecorderEntry) { + ((RecorderEntry) o).close(); + } else if (o instanceof AntClassLoader) { + ((AntClassLoader) o).cleanup(); + } + } + newProject = null; Enumeration e = properties.elements(); while (e.hasMoreElements()) { @@ -646,6 +661,13 @@ public class Ant extends Task { propertySets.addElement(ps); } + /** + * @since Ant 1.6.2 + */ + private Iterator getBuildListeners() { + return getProject().getBuildListeners().iterator(); + } + /** * Helper class that implements the nested <reference> * element of <ant> and <antcall>. diff --git a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java index 78e4fc091..e103d5376 100644 --- a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java +++ b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java @@ -99,8 +99,7 @@ public class RecorderEntry implements BuildLogger { + StringUtils.LINE_SEP); error.printStackTrace(out); } - out.flush(); - out.close(); + close(); } @@ -208,5 +207,13 @@ public class RecorderEntry implements BuildLogger { } } + + /** + * @since 1.6.2 + */ + public void close() { + out.flush(); + out.close(); + } }