summaryrefslogtreecommitdiff
path: root/clientserver/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-25 11:06:53 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-25 11:07:10 -0800
commit677a70fc1a55f81b8b1e51bcbb6d698648e644fa (patch)
tree5ad57727cce9e07f6530aad915cd5c75bf2fd8ab /clientserver/src
parent14025146485171a2153b3f7a887a223c8c562246 (diff)
downloadmill-677a70fc1a55f81b8b1e51bcbb6d698648e644fa.tar.gz
mill-677a70fc1a55f81b8b1e51bcbb6d698648e644fa.tar.bz2
mill-677a70fc1a55f81b8b1e51bcbb6d698648e644fa.zip
attempt to robustify ClientServerTests
Diffstat (limited to 'clientserver/src')
-rw-r--r--clientserver/src/mill/clientserver/Server.scala31
1 files changed, 18 insertions, 13 deletions
diff --git a/clientserver/src/mill/clientserver/Server.scala b/clientserver/src/mill/clientserver/Server.scala
index 2b8ad39f..04ddbf0c 100644
--- a/clientserver/src/mill/clientserver/Server.scala
+++ b/clientserver/src/mill/clientserver/Server.scala
@@ -35,21 +35,26 @@ class Server[T](lockBase: String,
def run() = {
locks.processLock.tryLockBlock{
var running = true
- while (running) locks.serverLock.lockBlock{
- new File(ioPath).delete()
- val ioSocket = new UnixDomainServerSocket(ioPath)
- val sockOpt = ClientServer.interruptWith(
- acceptTimeout,
- new UnixDomainSocket(ioPath).close(),
- ioSocket.accept()
- )
+ while (running) {
+ locks.serverLock.lockBlock{
+ new File(ioPath).delete()
+ val ioSocket = new UnixDomainServerSocket(ioPath)
+ val sockOpt = ClientServer.interruptWith(
+ acceptTimeout,
+ new UnixDomainSocket(ioPath).close(),
+ ioSocket.accept()
+ )
- sockOpt match{
- case None => running = false
- case Some(sock) =>
- try handleRun(sock)
- catch{case e: Throwable => e.printStackTrace(originalStdout) }
+ sockOpt match{
+ case None => running = false
+ case Some(sock) =>
+ try handleRun(sock)
+ catch{case e: Throwable => e.printStackTrace(originalStdout) }
+ }
}
+ // Make sure you give an opportunity for the client to probe the lock
+ // and realize the server has released it to signal completion
+ Thread.sleep(10)
}
}.getOrElse(throw new Exception("PID already present"))
}