[project @ 2003-11-12 17:49:05 by sof]
[ghc-hetmet.git] / ghc / includes / TSO.h
index c99a7cd..f72d3bb 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: TSO.h,v 1.30 2003/02/21 05:34:15 sof Exp $
+ * $Id: TSO.h,v 1.33 2003/11/12 17:27:05 sof Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -41,15 +41,21 @@ typedef struct {
   CostCentreStack *CCCS;       /* thread's current CCS */
 } StgTSOProfInfo;
 #else /* !PROFILING */
+# if defined(SUPPORTS_EMPTY_STRUCTS)
 typedef struct {
+    /* empty */
 } StgTSOProfInfo;
+# endif
 #endif /* PROFILING */
 
 #if defined(PAR)
 typedef StgTSOStatBuf StgTSOParInfo;
 #else /* !PAR */
+# if defined(SUPPORTS_EMPTY_STRUCTS)
 typedef struct {
+    /* empty */
 } StgTSOParInfo;
+# endif
 #endif /* PAR */
 
 #if defined(DIST)
@@ -59,15 +65,21 @@ typedef struct {
   StgInt             revalSlot;
 } StgTSODistInfo;
 #else /* !DIST */
+# if defined(SUPPORTS_EMPTY_STRUCTS)
 typedef struct {
+    /* empty */
 } StgTSODistInfo;
+# endif
 #endif /* DIST */
 
 #if defined(GRAN)
 typedef StgTSOStatBuf StgTSOGranInfo;
 #else /* !GRAN */
+# if defined(SUPPORTS_EMPTY_STRUCTS)
 typedef struct {
+    /* empty */
 } StgTSOGranInfo;
+# endif
 #endif /* GRAN */
 
 
@@ -75,8 +87,11 @@ typedef struct {
 typedef struct {
 } StgTSOTickyInfo;
 #else /* !TICKY_TICKY */
+# if defined(SUPPORTS_EMPTY_STRUCTS)
 typedef struct {
+    /* empty */
 } StgTSOTickyInfo;
+# endif
 #endif /* TICKY_TICKY */
 
 typedef enum {
@@ -139,6 +154,9 @@ typedef enum {
   BlockedOnRead,
   BlockedOnWrite,
   BlockedOnDelay
+#if defined(mingw32_TARGET_OS)
+  , BlockedOnDoProc
+#endif
 #if defined(PAR)
   , BlockedOnGA  // blocked on a remote closure represented by a Global Address
   , BlockedOnGA_NoSend // same as above but without sending a Fetch message
@@ -150,7 +168,7 @@ typedef enum {
 #endif
 } StgTSOBlockReason;
 
-#ifdef mingw32_TARGET_OS
+#if defined(mingw32_TARGET_OS)
 /* results from an async I/O request + it's ID. */
 typedef struct {
   unsigned int reqID;
@@ -163,7 +181,7 @@ typedef union {
   StgClosure *closure;
   struct StgTSO_ *tso;
   int fd;
-#ifdef mingw32_TARGET_OS
+#if defined(mingw32_TARGET_OS)
   StgAsyncIOResult* async_result;
 #endif
   unsigned int target;
@@ -191,12 +209,13 @@ typedef struct StgTSO_ {
   StgTSOBlockInfo    block_info;
   struct StgTSO_*    blocked_exceptions;
   StgThreadID        id;
-
-  StgTSOTickyInfo    ticky; 
-  StgTSOProfInfo     prof;
-  StgTSOParInfo      par;
-  StgTSOGranInfo     gran;
-  StgTSODistInfo     dist;
+  int                saved_errno;
+  
+  MAYBE_EMPTY_STRUCT(StgTSOTickyInfo,ticky)
+  MAYBE_EMPTY_STRUCT(StgTSOProfInfo,prof)
+  MAYBE_EMPTY_STRUCT(StgTSOParInfo,par)
+  MAYBE_EMPTY_STRUCT(StgTSOGranInfo,gran)
+  MAYBE_EMPTY_STRUCT(StgTSODistInfo,dist)
     
   /* The thread stack... */
   StgWord           stack_size;     /* stack size in *words* */