X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Frts%2FCapability.h;h=b559dcd2dc790db23d8a953fefe568272c4a7d13;hb=9348149e3cfbda59690c6c6f16dd38008f0fa59d;hp=5b960198dbd9a240b684e2946c225eb7a3f54efb;hpb=d3cfe8948991666fe518140b1a60082accb7b7fd;p=ghc-hetmet.git diff --git a/ghc/rts/Capability.h b/ghc/rts/Capability.h index 5b96019..b559dcd 100644 --- a/ghc/rts/Capability.h +++ b/ghc/rts/Capability.h @@ -77,6 +77,17 @@ struct Capability_ { #endif }; // typedef Capability, defined in RtsAPI.h + +// These properties should be true when a Task is holding a Capability +#define ASSERT_CAPABILITY_INVARIANTS(cap,task) \ + ASSERT(cap->running_task != NULL && cap->running_task == task); \ + ASSERT(task->cap == cap); \ + ASSERT(cap->run_queue_hd == END_TSO_QUEUE ? \ + cap->run_queue_tl == END_TSO_QUEUE : 1); \ + ASSERT(myTask() == task); \ + ASSERT(task->id == osThreadId()); + + // Converts a *StgRegTable into a *Capability. // INLINE_HEADER Capability *