[project @ 2003-07-12 00:11:20 by sof]
[ghc-hetmet.git] / ghc / rts / Exception.h
index 07203f9..a2e0027 100644 (file)
@@ -1,11 +1,33 @@
 /* -----------------------------------------------------------------------------
- * $Id: Exception.h,v 1.1 1999/12/01 14:34:38 simonmar Exp $
+ * $Id: Exception.h,v 1.6 2003/07/12 00:11:20 sof Exp $
  *
- * (c) The GHC Team, 1998-1999
+ * (c) The GHC Team, 1998-2000
  *
  * Exception support
  *
  * ---------------------------------------------------------------------------*/
 
-extern const StgInfoTable blockAsyncExceptionszh_ret_info;
-extern const StgInfoTable unblockAsyncExceptionszh_ret_info;
+extern const StgRetInfoTable stg_blockAsyncExceptionszh_ret_info;
+extern const StgRetInfoTable stg_unblockAsyncExceptionszh_ret_info;
+
+/* Determine whether a thread is interruptible (ie. blocked
+ * indefinitely).  Interruptible threads can be sent an exception with
+ * killThread# even if they have async exceptions blocked.
+ */
+static __inline__ int
+interruptible(StgTSO *t)
+{
+  switch (t->why_blocked) {
+  case BlockedOnMVar:
+  case BlockedOnException:
+  case BlockedOnRead:
+  case BlockedOnWrite:
+#if defined(mingw32_TARGET_OS)
+  case BlockedOnDoProc:
+#endif
+  case BlockedOnDelay:
+    return 1;
+  default:
+    return 0;
+  }
+}