Browse Source

ensure classloaders get cleaned up when no longer needed

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@810063 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 16 years ago
parent
commit
9923ec1698
1 changed files with 19 additions and 1 deletions
  1. +19
    -1
      src/main/org/apache/tools/ant/types/resources/AbstractClasspathResource.java

+ 19
- 1
src/main/org/apache/tools/ant/types/resources/AbstractClasspathResource.java View File

@@ -24,6 +24,7 @@ import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.util.FileUtils;

import java.io.FilterInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Stack;
@@ -172,6 +173,7 @@ public abstract class AbstractClasspathResource extends Resource {
}
dieOnCircularReference();
ClassLoader cl = null;
boolean clNeedsCleanup = false;
if (loader != null) {
cl = (ClassLoader) loader.getReferencedObject();
}
@@ -186,6 +188,7 @@ public abstract class AbstractClasspathResource extends Resource {
getProject(),
p, false);
}
clNeedsCleanup = loader != null;
} else {
cl = JavaResource.class.getClassLoader();
}
@@ -194,7 +197,22 @@ public abstract class AbstractClasspathResource extends Resource {
}
}

return openInputStream(cl);
final ClassLoader classLoader = cl;
return !clNeedsCleanup
? openInputStream(cl)
: new FilterInputStream(openInputStream(cl)) {
public void close() throws IOException {
FileUtils.close(in);
((AntClassLoader) classLoader).cleanup();
}
protected void finalize() throws Throwable {
try {
close();
} finally {
super.finalize();
}
}
};
}

/**


Loading…
Cancel
Save