X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FTSO.h;h=0c3e4eec384b14acf32e95352c92abcdaef1ef85;hb=b1953bbb1ed3cb16497e5447db7487f0c2d9e41a;hp=d096d401cfecf4fe9defee48ff16d03146c0eb0f;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/includes/TSO.h b/includes/TSO.h index d096d40..0c3e4ee 100644 --- a/includes/TSO.h +++ b/includes/TSO.h @@ -77,27 +77,6 @@ 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 - -/* - * TSO_LOCKED is set when a TSO is locked to a particular Capability. - */ -#define TSO_LOCKED 2 - #define tsoDirty(tso) ((tso)->flags & TSO_DIRTY) #define tsoLocked(tso) ((tso)->flags & TSO_LOCKED) @@ -127,6 +106,7 @@ typedef union { StgWord target; } StgTSOBlockInfo; + /* * TSOs live on the heap, and therefore look just like heap objects. * Large TSOs will live in their own "block group" allocated by the @@ -151,13 +131,19 @@ typedef struct StgTSO_ { StgWord16 why_blocked; /* Values defined in Constants.h */ StgWord32 flags; StgTSOBlockInfo block_info; - struct StgTSO_* blocked_exceptions; StgThreadID id; int saved_errno; struct Task_* bound; struct Capability_* cap; struct StgTRecHeader_ * trec; /* STM transaction record */ + /* + A list of threads blocked on this TSO waiting to throw + exceptions. In order to access this field, the TSO must be + locked using lockClosure/unlockClosure (see SMP.h). + */ + struct StgTSO_ * blocked_exceptions; + #ifdef TICKY_TICKY /* TICKY-specific stuff would go here. */ #endif