summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/util
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2016-03-30 17:37:57 +1000
committerJason Zaugg <jzaugg@gmail.com>2016-03-30 17:37:57 +1000
commit6181525f60588228ce99ab3ef2593ecfcfd35066 (patch)
treed85751d95ca93406768d4045c8d6655b4800d222 /src/reflect/scala/reflect/internal/util
parent7e57bcc1818a402ad6ec32416af2b4522671f9ab (diff)
downloadscala-6181525f60588228ce99ab3ef2593ecfcfd35066.tar.gz
scala-6181525f60588228ce99ab3ef2593ecfcfd35066.tar.bz2
scala-6181525f60588228ce99ab3ef2593ecfcfd35066.zip
At the end of a run, close macro runtime's classloader
We can only do this on 2.12.x, because URLClassLoader#close is new in JDK 7. Tested manually with the REPL and resident compilers. ``` % qscalac sandbox/macro.scala && (for i in 1 2; do echo sandbox/client.scala; done; printf '\n') | qscalac -Xresident -Ylog:all -Ydebug 2>&1 | grep "Closing macro runtime classloader" [log terminal] Closing macro runtime classloader [log terminal] Closing macro runtime classloader % qscalac sandbox/macro.scala && (for i in 1 2; do echo Macro.m; done; printf '\n') | qscala -Ylog:all -Ydebug 2>&1 | grep "Closing macro runtime classloader"; stty echo [log terminal] Closing macro runtime classloader [log terminal] Closing macro runtime classloader ``` Note: this doesn't close handles to JAR files held by the compiler classpath implementation, that will require changes elsewhere.
Diffstat (limited to 'src/reflect/scala/reflect/internal/util')
-rw-r--r--src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala b/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala
index cc5be92489..f3db2017be 100644
--- a/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala
+++ b/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala
@@ -139,6 +139,10 @@ object ScalaClassLoader {
classloaderURLs :+= url
super.addURL(url)
}
+ override def close(): Unit = {
+ super.close()
+ classloaderURLs = null
+ }
}
def fromURLs(urls: Seq[URL], parent: ClassLoader = null): URLClassLoader =