X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FTSO.h;h=82ecacb867f065f117560e82e4922769dcecba25;hb=e6218fe7eff4e34e1a3c823cd4b7aebe09d2d4fb;hp=747c070d315d8de361851540d5e92fd3434e7089;hpb=03a9ff01812afc81eb5236fd3063cbec44cf469e;p=ghc-hetmet.git diff --git a/ghc/includes/TSO.h b/ghc/includes/TSO.h index 747c070..82ecacb 100644 --- a/ghc/includes/TSO.h +++ b/ghc/includes/TSO.h @@ -77,6 +77,22 @@ typedef StgTSOStatBuf StgTSOGranInfo; */ typedef StgWord32 StgThreadID; +/* + * Flags for the tso->flags field. + * + * The TSO_DIRTY flag indicates that this TSO's stack should be + * scanned during garbage collection. The link field of a TSO is + * always scanned, so we don't have to dirty a TSO just for linking + * it on a different list. + * + * TSO_DIRTY is set by + * - schedule(), just before running a thread, + * - raiseAsync(), because it modifies a thread's stack + * - resumeThread(), just before running the thread again + * and unset by the garbage collector (only). + */ +#define TSO_DIRTY 1 + /* * Type returned after running a thread. Values of this type * include HeapOverflow, StackOverflow etc. See Constants.h for the @@ -117,18 +133,15 @@ typedef union { * field. */ -/* - * ToDo: make this structure sensible on a non-32-bit arch. - */ - typedef struct StgTSO_ { StgHeader header; struct StgTSO_* link; /* Links threads onto blocking queues */ struct StgTSO_* global_link; /* Links all threads together */ - StgWord16 what_next; /* Values defined in Constants.h */ - StgWord16 why_blocked; /* Values defined in Constants.h */ + StgWord16 what_next; /* Values defined in Constants.h */ + StgWord16 why_blocked; /* Values defined in Constants.h */ + StgWord32 flags; StgTSOBlockInfo block_info; struct StgTSO_* blocked_exceptions; StgThreadID id;