diff --git a/kyuubi-common/src/main/scala/org/apache/kyuubi/service/FrontendService.scala b/kyuubi-common/src/main/scala/org/apache/kyuubi/service/FrontendService.scala index fee0230b1..ec5c51b09 100644 --- a/kyuubi-common/src/main/scala/org/apache/kyuubi/service/FrontendService.scala +++ b/kyuubi-common/src/main/scala/org/apache/kyuubi/service/FrontendService.scala @@ -103,7 +103,7 @@ class FrontendService private (name: String, be: BackendService, oomHook: Runnab def connectionUrl: String = s"${serverAddr.getCanonicalHostName}:$portNum" - override def start(): Unit = { + override def start(): Unit = synchronized { super.start() if (!isStarted) { val thread = new Thread(this) @@ -122,7 +122,7 @@ class FrontendService private (name: String, be: BackendService, oomHook: Runnab System.exit(-1) } - override def stop(): Unit = { + override def stop(): Unit = synchronized { if (isStarted) { server.foreach(_.stop()) info(this.name + " has stopped") diff --git a/kyuubi-main/src/main/scala/org/apache/kyuubi/engine/ProcBuilder.scala b/kyuubi-main/src/main/scala/org/apache/kyuubi/engine/ProcBuilder.scala index 119e5e944..deccb2e08 100644 --- a/kyuubi-main/src/main/scala/org/apache/kyuubi/engine/ProcBuilder.scala +++ b/kyuubi-main/src/main/scala/org/apache/kyuubi/engine/ProcBuilder.scala @@ -56,7 +56,7 @@ trait ProcBuilder { @volatile private var error: Throwable = UNCAUGHT_ERROR - final def start: Process = { + final def start: Process = synchronized { val procLog = Paths.get(workingDir.toAbsolutePath.toString, s"$module.log") processBuilder.redirectError(procLog.toFile) processBuilder.redirectOutput(procLog.toFile) @@ -83,6 +83,8 @@ trait ProcBuilder { } } catch { case _: IOException => + } finally { + reader.close() } } @@ -90,7 +92,7 @@ trait ProcBuilder { proc } - def getError: Throwable = { + def getError: Throwable = synchronized { if (error == UNCAUGHT_ERROR) { Thread.sleep(3000) }