diff --git a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileDaemon.kt b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileDaemon.kt index a3df5ccfe3f..10b2d2037a8 100644 --- a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileDaemon.kt +++ b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileDaemon.kt @@ -30,6 +30,7 @@ import java.rmi.registry.Registry import java.text.SimpleDateFormat import java.util.* import java.util.jar.Manifest +import java.util.logging.Level import java.util.logging.LogManager import java.util.logging.Logger import kotlin.concurrent.timer @@ -120,11 +121,13 @@ public object CompileDaemon { val runFileDir = File(if (daemonOptions.runFilesPath.isBlank()) COMPILE_DAEMON_DEFAULT_RUN_DIR_PATH else daemonOptions.runFilesPath) runFileDir.mkdirs() val runFile = File(runFileDir, - makeRunFilenameString(timestamp = "%tFT% daemonOptions.autoshutdownIdleSeconds}, - "Idle timeout exceeded ${daemonOptions.autoshutdownIdleSeconds}s, shutting down") || - shutdownCondition({ daemonOptions.clientAliveFlagPath?.let { !File(it).exists() } ?: false }, - "Client alive flag ${daemonOptions.clientAliveFlagPath} removed, shutting down")) - { - cancel() - compilerService.shutdown() + try { + val idleSeconds = nowSeconds() - compilerService.lastUsedSeconds + if (shutdownCondition({ !runFile.exists() }, "Run file removed, shutting down") || + shutdownCondition({ daemonOptions.autoshutdownIdleSeconds != COMPILE_DAEMON_TIMEOUT_INFINITE_S && idleSeconds > daemonOptions.autoshutdownIdleSeconds }, + "Idle timeout exceeded ${daemonOptions.autoshutdownIdleSeconds}s, shutting down") || + shutdownCondition({ daemonOptions.clientAliveFlagPath?.let { !File(it).exists() } ?: false }, + "Client alive flag ${daemonOptions.clientAliveFlagPath} removed, shutting down")) { + cancel() + compilerService.shutdown() + } + } + catch (e: Exception) { + System.err.println("Exception in timer thread: " + e.getMessage()) + e.printStackTrace(System.err) } } } catch (e: Exception) { System.err.println("Exception: " + e.getMessage()) - log.info("Exception" + e.getMessage()) - log.info(e.toString()) + e.printStackTrace(System.err) + // repeating it to log for the cases when stderr is not redirected yet + log.log(Level.INFO, "Exception: ", e) // TODO consider exiting without throwing throw e } - } val random = Random() diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinBuildProcessParametersProvider.kt b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinBuildProcessParametersProvider.kt index b69a2deea88..d8e56b8d09d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinBuildProcessParametersProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinBuildProcessParametersProvider.kt @@ -33,7 +33,7 @@ public class KotlinBuildProcessParametersProvider(private val compilerWorkspaceS kotlinPluginStartupComponent.aliveFlagPath.let { if (!it.isBlank()) { // TODO: consider taking the property name from compiler/rmi-interface (check whether dependency will be not too heavy) - res.add("-Dkotlin.daemon.client.alive.path=$it") + res.add("-Dkotlin.daemon.client.alive.path=\"$it\"") } } return res diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt index 591da70fc26..3870a842b98 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt @@ -112,7 +112,8 @@ public class SimpleKotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { public fun testThreeModulesNoReexportWithDaemon() { System.setProperty(COMPILE_DAEMON_ENABLED_PROPERTY,"") System.setProperty(COMPILE_DAEMON_VERBOSE_REPORT_PROPERTY, "") - val flagFile = File.createTempFile("kotlin-jps-tests-", "-is-running"); + // spaces in the name to test proper file name handling + val flagFile = File.createTempFile("kotlin-jps - tests-", "-is-running"); try { System.setProperty(COMPILE_DAEMON_CLIENT_ALIVE_PATH_PROPERTY, flagFile.absolutePath) testThreeModulesNoReexport()