Additional stop for JobScheduler

Background threads prevents class loader collect

 #KT-7172 In Progress
This commit is contained in:
Nikolay Krasko
2015-04-09 21:28:27 +03:00
parent ea47e29757
commit 8ed54a6dba
@@ -17,9 +17,10 @@
package org.jetbrains.kotlin.gradle.plugin
import org.gradle.BuildAdapter
import org.gradle.api.logging.Logging
import org.gradle.BuildResult
import org.gradle.api.logging.Logging
import java.lang.ref.Reference
import java.util.concurrent.ScheduledExecutorService
class FinishBuildListener(var pluginClassLoader: ParentLastURLClassLoader?) : BuildAdapter() {
val log = Logging.getLogger(this.javaClass)
@@ -29,6 +30,7 @@ class FinishBuildListener(var pluginClassLoader: ParentLastURLClassLoader?) : Bu
stopZipFileCache()
stopLowMemoryWatcher()
stopJobScheduler()
// TODO: Try to clean up thread locals without this ugly hack
// TODO: Further investigation of PermGen leak (KT-6451)
@@ -81,6 +83,18 @@ class FinishBuildListener(var pluginClassLoader: ParentLastURLClassLoader?) : Bu
log.debug("LowMemoryWatcher finished successfully")
}
private fun stopJobScheduler() {
log.debug("Stop JobScheduler")
val jobSchedulerClass = Class.forName("com.intellij.concurrency.JobScheduler", false, pluginClassLoader)
val getSchedulerMethod = jobSchedulerClass.getMethod("getScheduler")
val executorService = getSchedulerMethod.invoke(this) as ScheduledExecutorService
executorService.shutdown()
log.debug("JobScheduler stopped")
}
private fun callVoidStaticMethod(classFqName: String, methodName: String) {
val shortName = classFqName.substring(classFqName.lastIndexOf('.') + 1)