equal
deleted
inserted
replaced
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 |