X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FTSO.h;h=22f3e530a8c6626867e0a73ae7e371def2e712f0;hb=a20ec0ced36bca7cd0594528922dbe31a6186eae;hp=7c6e1c048e2d3fe2f6f35f5e44b036ffb7da090c;hpb=18340925716fb6e68672c69bd263ad9041f81822;p=ghc-hetmet.git diff --git a/ghc/includes/TSO.h b/ghc/includes/TSO.h index 7c6e1c0..22f3e53 100644 --- a/ghc/includes/TSO.h +++ b/ghc/includes/TSO.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: TSO.h,v 1.31 2003/07/03 15:14:58 sof Exp $ + * $Id: TSO.h,v 1.34 2004/03/01 14:18:35 simonmar 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 { @@ -146,11 +161,9 @@ typedef enum { , BlockedOnGA // blocked on a remote closure represented by a Global Address , BlockedOnGA_NoSend // same as above but without sending a Fetch message #endif -#if defined(RTS_SUPPORTS_THREADS) , BlockedOnCCall - , BlockedOnCCall_NoUnblockExc // same as above but don't unblock async exceptions - // in resumeThread() -#endif + , BlockedOnCCall_NoUnblockExc // same as above but don't unblock + // async exceptions in resumeThread() } StgTSOBlockReason; #if defined(mingw32_TARGET_OS) @@ -189,17 +202,19 @@ typedef struct StgTSO_ { StgMutClosure * mut_link; /* TSO's are mutable of course! */ struct StgTSO_* global_link; /* Links all threads together */ - StgTSOWhatNext what_next : 16; - StgTSOBlockReason why_blocked : 16; - StgTSOBlockInfo block_info; - struct StgTSO_* blocked_exceptions; - StgThreadID id; - - StgTSOTickyInfo ticky; - StgTSOProfInfo prof; - StgTSOParInfo par; - StgTSOGranInfo gran; - StgTSODistInfo dist; + StgTSOWhatNext what_next : 16; + StgTSOBlockReason why_blocked : 16; + StgTSOBlockInfo block_info; + struct StgTSO_* blocked_exceptions; + StgThreadID id; + int saved_errno; + struct StgMainThread_* main; + + 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* */