summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-25 15:28:38 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-25 15:28:38 -0800
commitc5b967515cc4ccf6ebe76c69691c196b55113b3c (patch)
tree21a0adaa2185feaebd466ebe7de6a9df382a5e88
parent554840f9b5cd30a8e3209cb18bdf9925f364cc68 (diff)
downloadmill-c5b967515cc4ccf6ebe76c69691c196b55113b3c.tar.gz
mill-c5b967515cc4ccf6ebe76c69691c196b55113b3c.tar.bz2
mill-c5b967515cc4ccf6ebe76c69691c196b55113b3c.zip
avoid blocking on stdin in the client because it seems to delay exit
-rw-r--r--clientserver/src/mill/clientserver/Client.scala2
-rw-r--r--clientserver/src/mill/clientserver/ClientServer.scala15
2 files changed, 11 insertions, 6 deletions
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()
+ }
}
}
}