summaryrefslogtreecommitdiff
path: root/clientserver
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
parent14025146485171a2153b3f7a887a223c8c562246 (diff)
downloadmill-677a70fc1a55f81b8b1e51bcbb6d698648e644fa.tar.gz
mill-677a70fc1a55f81b8b1e51bcbb6d698648e644fa.tar.bz2
mill-677a70fc1a55f81b8b1e51bcbb6d698648e644fa.zip
attempt to robustify ClientServerTests
Diffstat (limited to 'clientserver')
-rw-r--r--clientserver/src/mill/clientserver/Server.scala31
-rw-r--r--clientserver/test/src/mill/clientserver/ClientServerTests.scala4
2 files changed, 22 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"))
}
diff --git a/clientserver/test/src/mill/clientserver/ClientServerTests.scala b/clientserver/test/src/mill/clientserver/ClientServerTests.scala
index f9f76f9a..a02e2733 100644
--- a/clientserver/test/src/mill/clientserver/ClientServerTests.scala
+++ b/clientserver/test/src/mill/clientserver/ClientServerTests.scala
@@ -82,6 +82,10 @@ object ClientServerTests extends TestSuite{
err1 == "HELLOworld\n"
)
+ // Give a bit of time for the server to release the lock and
+ // re-acquire it to signal to the client that it's done
+ Thread.sleep(100)
+
assert(
locks.clientLock.probe(),
!locks.serverLock.probe(),