summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2008-12-18 15:04:27 +0000
committerPhilipp Haller <hallerp@gmail.com>2008-12-18 15:04:27 +0000
commitc3cfea47e0f8674931ea19c35c11cfefcf7c81e9 (patch)
tree71bc6695a9bad83ca9be62fc44c99d669a37ac3f /src
parentc26147bf68eecaf994c233193b141f71e80baa3e (diff)
downloadscala-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.scala35
-rw-r--r--src/partest/scala/tools/partest/nest/FileManager.scala2
-rw-r--r--src/partest/scala/tools/partest/nest/Worker.scala1
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)
}