support for POSIX interrupts (bypassed on Windows);
authorwenzelm
Sat, 23 Feb 2013 11:27:45 +0100
changeset 51250 ca13a14cc52e
parent 51249 5013ed756a78
child 51251 d55cce4d72dd
support for POSIX interrupts (bypassed on Windows);
src/Pure/System/interrupt.scala
src/Pure/build-jars
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/System/interrupt.scala	Sat Feb 23 11:27:45 2013 +0100
@@ -0,0 +1,29 @@
+/*  Title:      Pure/System/interrupt.scala
+    Author:     Makarius
+
+Support for POSIX interrupts (bypassed on Windows).
+*/
+
+package isabelle
+
+
+import sun.misc.{Signal, SignalHandler}
+
+
+object Interrupt
+{
+  def handler[A](h: => Unit)(e: => A): A =
+  {
+    val SIGINT = new Signal("INT")
+    val new_handler = new SignalHandler { def handle(s: Signal) { h } }
+    val old_handler = Signal.handle(SIGINT, new_handler)
+    try { e } finally { Signal.handle(SIGINT, old_handler) }
+  }
+
+  def exception[A](e: => A): A =
+  {
+    val thread = Thread.currentThread
+    handler { thread.interrupt } { e }
+  }
+}
+
--- a/src/Pure/build-jars	Fri Feb 22 20:25:51 2013 +0100
+++ b/src/Pure/build-jars	Sat Feb 23 11:27:45 2013 +0100
@@ -44,6 +44,7 @@
   System/event_bus.scala
   System/gui_setup.scala
   System/html5_panel.scala
+  System/interrupt.scala
   System/invoke_scala.scala
   System/isabelle_charset.scala
   System/isabelle_process.scala