src/Pure/System/posix_interrupt.scala
changeset 75393 87ebf5a50283
parent 73367 77ef8bef0593
equal deleted inserted replaced
75388:b3ca4a6ed74b 75393:87ebf5a50283
     8 
     8 
     9 
     9 
    10 import sun.misc.{Signal, SignalHandler}
    10 import sun.misc.{Signal, SignalHandler}
    11 
    11 
    12 
    12 
    13 object POSIX_Interrupt
    13 object POSIX_Interrupt {
    14 {
    14   def handler[A](h: => Unit)(e: => A): A = {
    15   def handler[A](h: => Unit)(e: => A): A =
       
    16   {
       
    17     val SIGINT = new Signal("INT")
    15     val SIGINT = new Signal("INT")
    18     val new_handler = new SignalHandler { def handle(s: Signal): Unit = h }
    16     val new_handler = new SignalHandler { def handle(s: Signal): Unit = h }
    19     val old_handler = Signal.handle(SIGINT, new_handler)
    17     val old_handler = Signal.handle(SIGINT, new_handler)
    20     try { e } finally { Signal.handle(SIGINT, old_handler) }
    18     try { e } finally { Signal.handle(SIGINT, old_handler) }
    21   }
    19   }
    22 
    20 
    23   def exception[A](e: => A): A =
    21   def exception[A](e: => A): A = {
    24   {
       
    25     val thread = Thread.currentThread
    22     val thread = Thread.currentThread
    26     handler { thread.interrupt() } { e }
    23     handler { thread.interrupt() } { e }
    27   }
    24   }
    28 }
    25 }
    29 
    26