Skip to content

Commit

Permalink
SI-7146 - Fixing checkinit bug in ExecutionContextImpl and adding test
Browse files Browse the repository at this point in the history
  • Loading branch information
viktorklang committed Feb 19, 2013
1 parent 123161b commit bb067d3
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/library/scala/concurrent/impl/ExecutionContextImpl.scala
Expand Up @@ -19,16 +19,16 @@ import scala.util.control.NonFatal


private[scala] class ExecutionContextImpl private[impl] (es: Executor, reporter: Throwable => Unit) extends ExecutionContextExecutor {
// Placed here since the creation of the executor needs to read this val
private[this] val uncaughtExceptionHandler: Thread.UncaughtExceptionHandler = new Thread.UncaughtExceptionHandler {
def uncaughtException(thread: Thread, cause: Throwable): Unit = reporter(cause)
}

val executor: Executor = es match {
case null => createExecutorService
case some => some
}

private[this] val uncaughtExceptionHandler: Thread.UncaughtExceptionHandler = new Thread.UncaughtExceptionHandler {
def uncaughtException(thread: Thread, cause: Throwable): Unit = reporter(cause)
}

// Implement BlockContext on FJP threads
class DefaultThreadFactory(daemonic: Boolean) extends ThreadFactory with ForkJoinPool.ForkJoinWorkerThreadFactory {
def wire[T <: Thread](thread: T): T = {
Expand Down
5 changes: 5 additions & 0 deletions test/files/jvm/t7146.check
@@ -0,0 +1,5 @@
should be scala.concurrent.impl.ExecutionContextImpl == true
should be scala.concurrent.forkjoin.ForkJoinPool == true
should have non-null UncaughtExceptionHandler == true
should be a scala.concurrent.impl.ExecutionContextImpl UncaughtExceptionHandler == true
should just print out on uncaught == true
23 changes: 23 additions & 0 deletions test/files/jvm/t7146.scala
@@ -0,0 +1,23 @@
import java.util.concurrent.Executor
import scala.concurrent._
import scala.util.control.NoStackTrace

object Test {
def main(args: Array[String]) {
println("should be scala.concurrent.impl.ExecutionContextImpl == " +
ExecutionContext.global.toString.startsWith("scala.concurrent.impl.ExecutionContextImpl"))
val i = ExecutionContext.global.asInstanceOf[{ def executor: Executor }]
println("should be scala.concurrent.forkjoin.ForkJoinPool == " +
i.executor.toString.startsWith("scala.concurrent.forkjoin.ForkJoinPool"))
val u = i.executor.
asInstanceOf[{ def getUncaughtExceptionHandler: Thread.UncaughtExceptionHandler }].
getUncaughtExceptionHandler
println("should have non-null UncaughtExceptionHandler == " + (u ne null))
println("should be a scala.concurrent.impl.ExecutionContextImpl UncaughtExceptionHandler == " +
u.toString.startsWith("scala.concurrent.impl.ExecutionContextImpl"))
print("should just print out on uncaught == ")
u.uncaughtException(Thread.currentThread, new Throwable {
override def printStackTrace() { println("true") }
})
}
}

0 comments on commit bb067d3

Please sign in to comment.