/* -----------------------------------------------------------------------------
- * $Id: Exception.h,v 1.4 2000/12/04 12:31:20 simonmar Exp $
*
- * (c) The GHC Team, 1998-2000
+ * (c) The GHC Team, 1998-2005
*
* Exception support
*
* ---------------------------------------------------------------------------*/
-extern const StgInfoTable stg_blockAsyncExceptionszh_ret_info;
-extern const StgInfoTable stg_unblockAsyncExceptionszh_ret_info;
+#ifndef EXCEPTION_H
+#define EXCEPTION_H
+
+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
+STATIC_INLINE int
interruptible(StgTSO *t)
{
switch (t->why_blocked) {
case BlockedOnException:
case BlockedOnRead:
case BlockedOnWrite:
+#if defined(mingw32_HOST_OS)
+ case BlockedOnDoProc:
+#endif
case BlockedOnDelay:
return 1;
+ // NB. Threaded blocked on foreign calls (BlockedOnCCall) are
+ // *not* interruptible. We can't send these threads an exception.
default:
return 0;
}
}
+
+#endif /* EXCEPTION_H */
+