Merge pull request #4786 from eatkins/close-classloaders

Close classloaders
This commit is contained in:
eugene yokota 2019-06-09 02:52:22 +02:00 committed by GitHub
commit 94d5eca166
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 3 deletions

View File

@ -7,6 +7,7 @@
package sbt.internal;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
@ -29,4 +30,9 @@ final class FlatLoader extends URLClassLoader {
}
return "FlatLoader(\n parent = " + getParent() + "\n jars = " + jars.toString() + ")";
}
@Override
public void close() throws IOException {
if (SysProp.closeClassLoaders()) super.close();
}
}

View File

@ -7,6 +7,7 @@
package sbt.internal;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
@ -31,4 +32,9 @@ final class ScalaLibraryClassLoader extends URLClassLoader {
}
return "ScalaLibraryClassLoader(" + builder + " parent = " + getParent() + ")";
}
@Override
public void close() throws IOException {
if (SysProp.closeClassLoaders()) super.close();
}
}

View File

@ -7,6 +7,7 @@
package sbt.internal;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
@ -26,4 +27,9 @@ final class ScalaReflectClassLoader extends URLClassLoader {
public String toString() {
return "ScalaReflectClassLoader(" + jar + " parent = " + getParent() + ")";
}
@Override
public void close() throws IOException {
if (SysProp.closeClassLoaders()) super.close();
}
}

View File

@ -31,6 +31,7 @@ private[internal] class LayeredClassLoaderImpl(
) extends URLClassLoader(classpath.map(_.toURI.toURL).toArray, parent)
with NativeLoader {
setTempDir(tempDir)
override def close(): Unit = if (SysProp.closeClassLoaders) super.close()
}
/**
@ -146,6 +147,7 @@ private[internal] final class ReverseLookupClassLoaderHolder(
}
override def loadClass(name: String, resolve: Boolean): Class[_] =
loadClass(name, resolve, reverseLookup = true)
override def close(): Unit = if (SysProp.closeClassLoaders) super.close()
}
/**
@ -193,7 +195,7 @@ private[internal] final class ReverseLookupClassLoaderHolder(
}
override def close(): Unit = {
checkin(parent)
super.close()
if (SysProp.closeClassLoaders) super.close()
}
}
}

View File

@ -82,9 +82,11 @@ object SysProp {
*/
lazy val color: Boolean = ConsoleAppender.formatEnabledInEnv
def closeClassLoaders: Boolean = getOrTrue("sbt.classloader.close")
def supershell: Boolean = color && getOrTrue("sbt.supershell")
def supersheelSleep: Long = long("sbt.supershell.sleep", 100L)
def supershellSleep: Long = long("sbt.supershell.sleep", 100L)
def defaultUseCoursier: Boolean = {
val coursierOpt = booleanOpt("sbt.coursier")

View File

@ -23,7 +23,7 @@ private[sbt] final class TaskProgress(log: ManagedLogger)
with ExecuteProgress[Task] {
private[this] val lastTaskCount = new AtomicInteger(0)
private[this] val currentProgressThread = new AtomicReference[Option[ProgressThread]](None)
private[this] val sleepDuration = SysProp.supersheelSleep
private[this] val sleepDuration = SysProp.supershellSleep
private[this] final class ProgressThread
extends Thread("task-progress-report-thread")
with AutoCloseable {