diff --git a/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt b/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt index bec4ea5055e..1b8529bb996 100644 --- a/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt +++ b/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt @@ -94,6 +94,7 @@ object KotlinCompilerClient { leaseSession: Boolean, sessionAliveFlagFile: File? = null ): ServiceWithSession? = connectLoop(reportingTargets) { + setupServerHostName() val (service, newJVMOptions) = tryFindSuitableDaemonOrNewOpts(File(daemonOptions.runFilesPath), compilerId, daemonJVMOptions, { cat, msg -> reportingTargets.report(cat, msg) }) if (service != null) { // the newJVMOptions could be checked here for additional parameters, if needed @@ -370,9 +371,7 @@ object KotlinCompilerClient { val javaExecutable = File(File(System.getProperty("java.home"), "bin"), "java") val platformSpecificOptions = listOf( // hide daemon window - "-Djava.awt.headless=true", - // prevent host name resolution - "-Djava.rmi.server.hostname=${LoopbackNetworkInterface.loopbackInetAddressName}") + "-Djava.awt.headless=true") val args = listOf( javaExecutable.absolutePath, "-cp", compilerId.compilerClasspath.joinToString(File.pathSeparator)) + platformSpecificOptions + diff --git a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/NetworkUtils.kt b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/NetworkUtils.kt index ab09aeb3066..6a47e509354 100644 --- a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/NetworkUtils.kt +++ b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/NetworkUtils.kt @@ -96,3 +96,10 @@ fun findPortAndCreateRegistry(attempts: Int, portRangeStart: Int, portRangeEnd: throw IllegalStateException("Cannot find free port in $attempts attempts", lastException) } +/** + * Needs to be set up on both client and server to prevent localhost resolution, + * which may be slow and can cause a timeout when there is a network problem/misconfiguration. + */ +fun setupServerHostName() { + System.setProperty("java.rmi.server.hostname", LoopbackNetworkInterface.loopbackInetAddressName) +} diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt index 1be59f76c10..85d877683f0 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt @@ -89,6 +89,7 @@ object KotlinCompileDaemon { @JvmStatic fun main(args: Array) { + setupServerHostName() log.info("Kotlin compiler daemon version " + (loadVersionFromResource() ?: "")) log.info("daemon JVM args: " + ManagementFactory.getRuntimeMXBean().inputArguments.joinToString(" "))