FastMutInt: fix Int and Ptr sizes when crosscompiling
[ghc.git] / rts / Schedule.h
index d61be04..1453af4 100644 (file)
@@ -21,7 +21,7 @@
  * Locks assumed   :  none
  */
 void initScheduler (void);
-void exitScheduler (rtsBool wait_foreign);
+void exitScheduler (bool wait_foreign);
 void freeScheduler (void);
 void markScheduler (evac_fn evac, void *user);
 
@@ -51,11 +51,10 @@ StgWord findRetryFrameHelper (Capability *cap, StgTSO *tso);
 void scheduleWorker (Capability *cap, Task *task);
 
 /* The state of the scheduler.  This is used to control the sequence
- * of events during shutdown, and when the runtime is interrupted
- * using ^C.
+ * of events during shutdown.  See Note [shutdown] in Schedule.c.
  */
 #define SCHED_RUNNING       0  /* running as normal */
-#define SCHED_INTERRUPTING  1  /* ^C detected, before threads are deleted */
+#define SCHED_INTERRUPTING  1  /* before threads are deleted */
 #define SCHED_SHUTTING_DOWN 2  /* final shutdown */
 
 extern volatile StgWord sched_state;
@@ -96,16 +95,13 @@ extern volatile StgWord recent_activity;
 
 /* Thread queues.
  * Locks required  : sched_mutex
- *
- * In GranSim we have one run/blocked_queue per PE.
  */
-extern  StgTSO *blackhole_queue;
 #if !defined(THREADED_RTS)
 extern  StgTSO *blocked_queue_hd, *blocked_queue_tl;
 extern  StgTSO *sleeping_queue;
 #endif
 
-extern rtsBool heap_overflow;
+extern bool heap_overflow;
 
 #if defined(THREADED_RTS)
 extern Mutex sched_mutex;
@@ -143,6 +139,7 @@ appendToRunQueue (Capability *cap, StgTSO *tso)
         setTSOPrev(cap, tso, cap->run_queue_tl);
     }
     cap->run_queue_tl = tso;
+    cap->n_run_queue++;
 }
 
 /* Push a thread on the beginning of the run queue.
@@ -163,6 +160,7 @@ pushOnRunQueue (Capability *cap, StgTSO *tso)
     if (cap->run_queue_tl == END_TSO_QUEUE) {
         cap->run_queue_tl = tso;
     }
+    cap->n_run_queue++;
 }
 
 /* Pop the first thread off the runnable queue.
@@ -180,6 +178,7 @@ popRunQueue (Capability *cap)
     if (cap->run_queue_hd == END_TSO_QUEUE) {
         cap->run_queue_tl = END_TSO_QUEUE;
     }
+    cap->n_run_queue--;
     return t;
 }
 
@@ -189,8 +188,7 @@ peekRunQueue (Capability *cap)
     return cap->run_queue_hd;
 }
 
-void removeFromRunQueue (Capability *cap, StgTSO *tso);
-extern void promoteInRunQueue (Capability *cap, StgTSO *tso);
+void promoteInRunQueue (Capability *cap, StgTSO *tso);
 
 /* Add a thread to the end of the blocked queue.
  */
@@ -210,25 +208,16 @@ appendToBlockedQueue(StgTSO *tso)
 
 /* Check whether various thread queues are empty
  */
-INLINE_HEADER rtsBool
+INLINE_HEADER bool
 emptyQueue (StgTSO *q)
 {
     return (q == END_TSO_QUEUE);
 }
 
-INLINE_HEADER rtsBool
+INLINE_HEADER bool
 emptyRunQueue(Capability *cap)
 {
-    return emptyQueue(cap->run_queue_hd);
-}
-
-/* assumes that the queue is not empty; so combine this with
- * an emptyRunQueue check! */
-INLINE_HEADER rtsBool
-singletonRunQueue(Capability *cap)
-{
-    ASSERT(!emptyRunQueue(cap));
-    return cap->run_queue_hd->_link == END_TSO_QUEUE;
+    return cap->n_run_queue == 0;
 }
 
 INLINE_HEADER void
@@ -236,6 +225,7 @@ truncateRunQueue(Capability *cap)
 {
     cap->run_queue_hd = END_TSO_QUEUE;
     cap->run_queue_tl = END_TSO_QUEUE;
+    cap->n_run_queue = 0;
 }
 
 #if !defined(THREADED_RTS)
@@ -243,7 +233,7 @@ truncateRunQueue(Capability *cap)
 #define EMPTY_SLEEPING_QUEUE() (emptyQueue(sleeping_queue))
 #endif
 
-INLINE_HEADER rtsBool
+INLINE_HEADER bool
 emptyThreadQueues(Capability *cap)
 {
     return emptyRunQueue(cap)