[project @ 2005-10-26 15:36:06 by simonmar]
[ghc-hetmet.git] / ghc / rts / Capability.h
index 5b96019..b559dcd 100644 (file)
@@ -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 *