src/Pure/System/posix_interrupt.scala
author nipkow
Tue, 17 Jun 2025 14:11:40 +0200
changeset 82733 8b537e1af2ec
parent 75393 87ebf5a50283
permissions -rw-r--r--
reinstated intersection of lists as inter_list_set

/*  Title:      Pure/System/posix_interrupt.scala
    Author:     Makarius

Support for POSIX interrupts (bypassed on Windows).
*/

package isabelle


import sun.misc.{Signal, SignalHandler}


object POSIX_Interrupt {
  def handler[A](h: => Unit)(e: => A): A = {
    val SIGINT = new Signal("INT")
    val new_handler = new SignalHandler { def handle(s: Signal): Unit = 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 }
  }
}