1/* Title: Pure/System/posix_interrupt.scala 2 Author: Makarius 3 4Support for POSIX interrupts (bypassed on Windows). 5*/ 6 7package isabelle 8 9 10import sun.misc.{Signal, SignalHandler} 11 12 13object POSIX_Interrupt 14{ 15 def handler[A](h: => Unit)(e: => A): A = 16 { 17 val SIGINT = new Signal("INT") 18 val new_handler = new SignalHandler { def handle(s: Signal) { h } } 19 val old_handler = Signal.handle(SIGINT, new_handler) 20 try { e } finally { Signal.handle(SIGINT, old_handler) } 21 } 22 23 def exception[A](e: => A): A = 24 { 25 val thread = Thread.currentThread 26 handler { thread.interrupt } { e } 27 } 28} 29 30