bodewig     2004/06/23 07:08:26

  Modified:    src/main/org/apache/tools/ant/taskdefs Ant.java
                        RecorderEntry.java
  Log:
  Preliminary fix for 8689
  
  Revision  Changes    Path
  1.101     +26 -4     ant/src/main/org/apache/tools/ant/taskdefs/Ant.java
  
  Index: Ant.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Ant.java,v
  retrieving revision 1.100
  retrieving revision 1.101
  diff -u -r1.100 -r1.101
  --- Ant.java  8 Apr 2004 14:58:19 -0000       1.100
  +++ Ant.java  23 Jun 2004 14:08:26 -0000      1.101
  @@ -24,9 +24,11 @@
   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 @@
       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 @@
               }
           } 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()) {
  @@ -644,6 +659,13 @@
        */
       public void addPropertyset(PropertySet ps) {
           propertySets.addElement(ps);
  +    }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    private Iterator getBuildListeners() {
  +        return getProject().getBuildListeners().iterator();
       }
   
       /**
  
  
  
  1.17      +9 -2      
ant/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
  
  Index: RecorderEntry.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- RecorderEntry.java        9 Mar 2004 16:48:06 -0000       1.16
  +++ RecorderEntry.java        23 Jun 2004 14:08:26 -0000      1.17
  @@ -99,8 +99,7 @@
                    + StringUtils.LINE_SEP);
               error.printStackTrace(out);
           }
  -        out.flush();
  -        out.close();
  +        close();
       }
   
   
  @@ -207,6 +206,14 @@
                    + (seconds % 60 == 1 ? "" : "s");
           }
   
  +    }
  +
  +    /**
  +     * @since 1.6.2
  +     */
  +    public void close() {
  +        out.flush();
  +        out.close();
       }
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to