diff options
author | Philipp Haller <hallerp@gmail.com> | 2008-12-18 15:04:27 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2008-12-18 15:04:27 +0000 |
commit | c3cfea47e0f8674931ea19c35c11cfefcf7c81e9 (patch) | |
tree | 71bc6695a9bad83ca9be62fc44c99d669a37ac3f /src | |
parent | c26147bf68eecaf994c233193b141f71e80baa3e (diff) | |
download | scala-c3cfea47e0f8674931ea19c35c11cfefcf7c81e9.tar.gz scala-c3cfea47e0f8674931ea19c35c11cfefcf7c81e9.tar.bz2 scala-c3cfea47e0f8674931ea19c35c11cfefcf7c81e9.zip |
Compilation timeouts are more robust
Diffstat (limited to 'src')
-rw-r--r-- | src/partest/scala/tools/partest/nest/CompileManager.scala | 35 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/nest/FileManager.scala | 2 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/nest/Worker.scala | 1 |
3 files changed, 36 insertions, 2 deletions
diff --git a/src/partest/scala/tools/partest/nest/CompileManager.scala b/src/partest/scala/tools/partest/nest/CompileManager.scala index a8eb044629..8bd9fc423f 100644 --- a/src/partest/scala/tools/partest/nest/CompileManager.scala +++ b/src/partest/scala/tools/partest/nest/CompileManager.scala @@ -159,8 +159,12 @@ class CompileManager(val fileManager: FileManager) { import scala.actors.Actor._ import scala.actors.{Actor, Exit, TIMEOUT} + import java.util.{Timer, TimerTask} + var compiler: SimpleCompiler = new /*ReflectiveCompiler*/ DirectCompiler(fileManager) + val timer = new Timer + var numSeparateCompilers = 1 def createSeparateCompiler() = { numSeparateCompilers += 1 @@ -173,7 +177,7 @@ class CompileManager(val fileManager: FileManager) { createSeparateCompiler() val parent = self - self.trapExit = true + /*self.trapExit = true val child = link { parent ! (self, thunk) } @@ -197,6 +201,35 @@ class CompileManager(val fileManager: FileManager) { t.getCause.printStackTrace false } + }*/ + + val ontimeout = new TimerTask { + def run() { + parent ! 'timeout + } + } + timer.schedule(ontimeout, delay) + + actor { + val result = try { + thunk + } catch { + case t: Throwable => + NestUI.verbose("while invoking compiler ("+files+"):") + NestUI.verbose("caught "+t) + t.printStackTrace + if (t.getCause != null) + t.getCause.printStackTrace + false + } + parent ! result + } + receive { + case 'timeout => + println("compilation timed out") + false + case r: Boolean => + r } } diff --git a/src/partest/scala/tools/partest/nest/FileManager.scala b/src/partest/scala/tools/partest/nest/FileManager.scala index 9a959b428b..ecd0e600c3 100644 --- a/src/partest/scala/tools/partest/nest/FileManager.scala +++ b/src/partest/scala/tools/partest/nest/FileManager.scala @@ -63,5 +63,5 @@ trait FileManager { var SCALAC_OPTS = System.getProperty("scalatest.scalac_opts", "-deprecation") var JAVA_OPTS = System.getProperty("scalatest.java_opts", "") - var timeout = "1200000" + var timeout = "2400000" } diff --git a/src/partest/scala/tools/partest/nest/Worker.scala b/src/partest/scala/tools/partest/nest/Worker.scala index ef7f81f475..86e3742070 100644 --- a/src/partest/scala/tools/partest/nest/Worker.scala +++ b/src/partest/scala/tools/partest/nest/Worker.scala @@ -856,6 +856,7 @@ class Worker(val fileManager: FileManager) extends Actor { } NestUI.verbose("finished testing "+kind+" with "+errors+" errors") NestUI.verbose("created "+compileMgr.numSeparateCompilers+" separate compilers") + compileMgr.timer.cancel() (files.length-errors, errors) } |