You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2016/10/22 19:29:59 UTC
svn commit: r1766225 - in
/openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave:
Microwave.java io/IO.java
Author: rmannibucau
Date: Sat Oct 22 19:29:59 2016
New Revision: 1766225
URL: http://svn.apache.org/viewvc?rev=1766225&view=rev
Log:
avoiding to leak directories
Modified:
openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java
openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/io/IO.java
Modified: openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java?rev=1766225&r1=1766224&r2=1766225&view=diff
==============================================================================
--- openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java (original)
+++ openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java Sat Oct 22 19:29:59 2016
@@ -89,15 +89,18 @@ import static java.util.Optional.ofNulla
public class Microwave implements AutoCloseable {
private final Builder configuration;
protected File base;
+ protected final File ownedTempDir;
protected InternalTomcat tomcat;
protected volatile Thread hook;
// we can undeploy webapps with that later
private final Map<String, Runnable> contexts = new HashMap<>();
private Runnable postTask;
+ private boolean clearCatalinaSystemProperties;
public Microwave(final Builder builder) {
this.configuration = builder;
+ this.ownedTempDir = new File(configuration.tempDir, "microwave_" + System.nanoTime());
}
public Builder getConfiguration() {
@@ -155,7 +158,7 @@ public class Microwave implements AutoCl
final File dir = ofNullable(meta.docBase).orElseGet(() -> {
- final File d = new File(configuration.tempDir, "classpath/fake-" + meta.context.replace("/", ""));
+ final File d = new File(ownedTempDir, "classpath/fake-" + meta.context.replace("/", ""));
IO.mkdirs(d);
return d;
});
@@ -230,6 +233,8 @@ public class Microwave implements AutoCl
}
public Microwave start() {
+ clearCatalinaSystemProperties = System.getProperty("catalina.base") == null && System.getProperty("catalina.home") == null;
+
if (configuration.loggingGlobalSetup) {
final String[] toRestore = new String[]{
System.getProperty("openwebbeans.logging.factory"),
@@ -478,12 +483,18 @@ public class Microwave implements AutoCl
} catch (final LifecycleException e) {
throw new IllegalStateException(e);
} finally {
+ if (clearCatalinaSystemProperties) {
+ Stream.of("catalina.base", "catalina.home").forEach(System::clearProperty);
+ }
ofNullable(postTask).ifPresent(Runnable::run);
postTask = null;
try {
IO.delete(base);
+ IO.delete(ownedTempDir);
} catch (final IllegalArgumentException /*does not exist from the hook*/ e) {
// no-op
+ } finally {
+ base = null;
}
}
}
@@ -541,9 +552,7 @@ public class Microwave implements AutoCl
private File createDirectory(final File parent, final String directory) {
final File dir = new File(parent, directory);
- if (!dir.exists() && !dir.mkdirs()) {
- throw new IllegalStateException("Unable to make dir " + dir.getAbsolutePath());
- }
+ IO.mkdirs(dir);
return dir;
}
@@ -671,7 +680,7 @@ public class Microwave implements AutoCl
private final Collection<Connector> connectors = new ArrayList<>();
@CliOption(name = "tmp-dir", description = "Temporary directory")
- private String tempDir = new File(System.getProperty("java.io.tmpdir"), "microwave_" + System.nanoTime()).getAbsolutePath();
+ private String tempDir = System.getProperty("java.io.tmpdir");
@CliOption(name = "web-resource-cached", description = "Cache web resources")
private boolean webResourceCached = true;
@@ -1402,14 +1411,9 @@ public class Microwave implements AutoCl
private static final String DEFAULT_HTTPS_PORT = "8443";
private static final String DEFAULT_STOP_PORT = "8005";
private static final String DEFAULT_HOST = "localhost";
- private static final String DEFAULT_APP_BASE = "webapps";
private final Map<String, String> values = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
- private QuickServerXmlParser() { // ensure defaults are present
- this(true);
- }
-
private QuickServerXmlParser(final boolean useDefaults) {
if (useDefaults) {
values.put(STOP_KEY, DEFAULT_STOP_PORT);
Modified: openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/io/IO.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/io/IO.java?rev=1766225&r1=1766224&r2=1766225&view=diff
==============================================================================
--- openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/io/IO.java (original)
+++ openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/io/IO.java Sat Oct 22 19:29:59 2016
@@ -44,15 +44,15 @@ public final class IO {
if (f.isFile()) {
retryDelete(f);
} else {
- delete(f);
+ retryDelete(f);
}
- retryDelete(f);
});
+ retryDelete(dir);
}
private static void retryDelete(final File f) {
for (int i = 0; i < 3; i++) {
- if (f.isFile() && !f.delete()) {
+ if (f.exists() && !f.delete()) {
System.gc(); // win
try {
Thread.sleep(50);