src/Pure/Concurrent/isabelle_thread.scala
changeset 71712 c6b7f4da67b3
parent 71711 d9aaafcd872b
child 71717 f871ccd358b3
--- a/src/Pure/Concurrent/isabelle_thread.scala	Mon Apr 06 20:11:07 2020 +0200
+++ b/src/Pure/Concurrent/isabelle_thread.scala	Mon Apr 06 21:04:33 2020 +0200
@@ -20,6 +20,9 @@
       case _ => error("Isabelle-specific thread required")
     }
 
+  def check_self: Boolean =
+    Thread.currentThread.isInstanceOf[Isabelle_Thread]
+
 
   /* create threads */
 
@@ -107,6 +110,10 @@
 
   def uninterruptible[A](body: => A): A =
     interrupt_handler(Interrupt_Handler.uninterruptible)(body)
+
+  def try_uninterruptible[A](body: => A): A =
+    if (check_self) interrupt_handler(Interrupt_Handler.uninterruptible)(body)
+    else body
 }
 
 class Isabelle_Thread private(main: Runnable, name: String, group: ThreadGroup,