From c5b967515cc4ccf6ebe76c69691c196b55113b3c Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 25 Feb 2018 15:28:38 -0800 Subject: avoid blocking on stdin in the client because it seems to delay exit --- clientserver/src/mill/clientserver/Client.scala | 2 +- clientserver/src/mill/clientserver/ClientServer.scala | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'clientserver/src') diff --git a/clientserver/src/mill/clientserver/Client.scala b/clientserver/src/mill/clientserver/Client.scala index 5e1af0aa..2fcea4c8 100644 --- a/clientserver/src/mill/clientserver/Client.scala +++ b/clientserver/src/mill/clientserver/Client.scala @@ -45,7 +45,7 @@ class Client(lockBase: String, val outErr = ioSocket.getInputStream val in = ioSocket.getOutputStream val outPump = new ClientOutputPumper(outErr, stdout, stderr) - val inPump = new ClientInputPumper(stdin, in) + val inPump = new ClientInputPumper(stdin, in, checkAvailable = true) val outThread = new Thread(outPump) outThread.setDaemon(true) val inThread = new Thread(inPump) diff --git a/clientserver/src/mill/clientserver/ClientServer.scala b/clientserver/src/mill/clientserver/ClientServer.scala index a7de2ba3..9ca3a138 100644 --- a/clientserver/src/mill/clientserver/ClientServer.scala +++ b/clientserver/src/mill/clientserver/ClientServer.scala @@ -103,16 +103,21 @@ class ProxyInputStream(x: => java.io.InputStream) extends java.io.InputStream{ override def read(b: Array[Byte]) = x.read(b) } -class ClientInputPumper(src: InputStream, dest: OutputStream) extends Runnable{ +class ClientInputPumper(src: InputStream, + dest: OutputStream, + checkAvailable: Boolean = false) extends Runnable{ var running = true def run() = { val buffer = new Array[Byte](1024) while(running){ - val n = src.read(buffer) - if (n == -1) running = false + if (checkAvailable && src.available() == 0) Thread.sleep(2) else { - dest.write(buffer, 0, n) - dest.flush() + val n = src.read(buffer) + if (n == -1) running = false + else { + dest.write(buffer, 0, n) + dest.flush() + } } } } -- cgit v1.2.3