From e7e29f2651cb4d1a7b5c316d1e39922b9c8b1e30 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 24 Mar 2017 19:22:29 +0300 Subject: [PATCH] Avoid changing java.rmi.server.hostname property --- .../jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt | 6 ++++-- .../src/org/jetbrains/kotlin/daemon/common/NetworkUtils.kt | 7 +++++-- .../src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) 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 48f0f67d74e..6a002290865 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 @@ -105,7 +105,7 @@ object KotlinCompilerClient { leaseSession: Boolean, sessionAliveFlagFile: File? = null ): CompileServiceSession? = connectLoop(reportingTargets) { - setupServerHostName() + ensureServerHostnameIsSetUp() 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 @@ -380,9 +380,11 @@ object KotlinCompilerClient { private fun startDaemon(compilerId: CompilerId, daemonJVMOptions: DaemonJVMOptions, daemonOptions: DaemonOptions, reportingTargets: DaemonReportingTargets) { val javaExecutable = File(File(System.getProperty("java.home"), "bin"), "java") + val serverHostname = System.getProperty(JAVA_RMI_SERVER_HOSTNAME) ?: error("$JAVA_RMI_SERVER_HOSTNAME is not set!") val platformSpecificOptions = listOf( // hide daemon window - "-Djava.awt.headless=true") + "-Djava.awt.headless=true", + "-D$JAVA_RMI_SERVER_HOSTNAME=$serverHostname") 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 6a47e509354..aa34d0ce7ec 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 @@ -31,6 +31,7 @@ import java.util.* val SOCKET_ANY_FREE_PORT = 0 +val JAVA_RMI_SERVER_HOSTNAME = "java.rmi.server.hostname" object LoopbackNetworkInterface { @@ -100,6 +101,8 @@ fun findPortAndCreateRegistry(attempts: Int, portRangeStart: Int, portRangeEnd: * 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) +fun ensureServerHostnameIsSetUp() { + if (System.getProperty(JAVA_RMI_SERVER_HOSTNAME) == null) { + 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 69173fa0928..885f7d93f8b 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinCompileDaemon.kt @@ -89,7 +89,7 @@ object KotlinCompileDaemon { @JvmStatic fun main(args: Array) { - setupServerHostName() + ensureServerHostnameIsSetUp() log.info("Kotlin compiler daemon version " + (loadVersionFromResource() ?: "")) log.info("daemon JVM args: " + ManagementFactory.getRuntimeMXBean().inputArguments.joinToString(" "))