Fixed uninitialised FunBind fun_tick field
[ghc-hetmet.git] / rts / Schedule.h
index 37b0794..ba5efc2 100644 (file)
@@ -19,6 +19,7 @@
  */
 void initScheduler (void);
 void exitScheduler (void);
+void freeScheduler (void);
 
 // Place a new thread on the run queue of the current Capability
 void scheduleThread (Capability *cap, StgTSO *tso);
@@ -43,30 +44,19 @@ void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node);
 void awakenBlockedQueue (Capability *cap, StgTSO *tso);
 #endif
 
+/* wakeUpRts()
+ * 
+ * Causes an OS thread to wake up and run the scheduler, if necessary.
+ */
+void wakeUpRts(void);
+
 /* unblockOne()
  *
  * Put the specified thread on the run queue of the given Capability.
  * Called from STG :  yes
  * Locks assumed   :  we own the Capability.
  */
-StgTSO * unblockOne(Capability *cap, StgTSO *tso);
-
-/* raiseAsync()
- *
- * Raises an exception asynchronously in the specified thread.
- *
- * Called from STG :  yes
- * Locks assumed   :  none
- */
-void raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception);
-
-/* suspendComputation()
- *
- * A variant of raiseAsync(), this strips the stack of the specified
- * thread down to the stop_here point, leaving a current closure on
- * top of the stack at [stop_here - 1].
- */
-void suspendComputation(Capability *cap, StgTSO *tso, StgPtr stop_here);
+StgTSO * unblockOne (Capability *cap, StgTSO *tso);
 
 /* raiseExceptionHelper */
 StgWord raiseExceptionHelper (StgRegTable *reg, StgTSO *tso, StgClosure *exception);
@@ -117,8 +107,7 @@ extern int RTS_VAR(context_switch);
  */
 #define SCHED_RUNNING       0  /* running as normal */
 #define SCHED_INTERRUPTING  1  /* ^C detected, before threads are deleted */
-#define SCHED_INTERRUPTED   2  /* ^C detected, after threads deleted */
-#define SCHED_SHUTTING_DOWN 3  /* final shutdown */
+#define SCHED_SHUTTING_DOWN 2  /* final shutdown */
 
 extern rtsBool RTS_VAR(sched_state);
 
@@ -171,8 +160,6 @@ extern rtsBool blackholes_need_checking;
 extern Mutex RTS_VAR(sched_mutex);
 #endif
 
-StgBool isThreadBound(StgTSO *tso);
-
 SchedulerStatus rts_mainLazyIO(HaskellObj p, /*out*/HaskellObj *ret);
 
 /* Called by shutdown_handler(). */
@@ -193,8 +180,6 @@ void print_bq (StgClosure *node);
 void print_bqe (StgBlockingQueueElement *bqe);
 #endif
 
-void labelThread(StgPtr tso, char *label);
-
 /* -----------------------------------------------------------------------------
  * Some convenient macros/inline functions...
  */
@@ -207,7 +192,7 @@ void labelThread(StgPtr tso, char *label);
  * NOTE: tso->link should be END_TSO_QUEUE before calling this macro.
  * ASSUMES: cap->running_task is the current task.
  */
-STATIC_INLINE void
+INLINE_HEADER void
 appendToRunQueue (Capability *cap, StgTSO *tso)
 {
     ASSERT(tso->link == END_TSO_QUEUE);
@@ -223,7 +208,7 @@ appendToRunQueue (Capability *cap, StgTSO *tso)
  * newly awakened threads, so they get run as soon as possible.
  * ASSUMES: cap->running_task is the current task.
  */
-STATIC_INLINE void
+INLINE_HEADER void
 pushOnRunQueue (Capability *cap, StgTSO *tso)
 {
     tso->link = cap->run_queue_hd;
@@ -235,7 +220,7 @@ pushOnRunQueue (Capability *cap, StgTSO *tso)
 
 /* Pop the first thread off the runnable queue.
  */
-STATIC_INLINE StgTSO *
+INLINE_HEADER StgTSO *
 popRunQueue (Capability *cap)
 { 
     StgTSO *t = cap->run_queue_hd;
@@ -251,7 +236,7 @@ popRunQueue (Capability *cap)
 /* Add a thread to the end of the blocked queue.
  */
 #if !defined(THREADED_RTS)
-STATIC_INLINE void
+INLINE_HEADER void
 appendToBlockedQueue(StgTSO *tso)
 {
     ASSERT(tso->link == END_TSO_QUEUE);
@@ -265,7 +250,7 @@ appendToBlockedQueue(StgTSO *tso)
 #endif
 
 #if defined(THREADED_RTS)
-STATIC_INLINE void
+INLINE_HEADER void
 appendToWakeupQueue (Capability *cap, StgTSO *tso)
 {
     ASSERT(tso->link == END_TSO_QUEUE);
@@ -280,20 +265,20 @@ appendToWakeupQueue (Capability *cap, StgTSO *tso)
 
 /* Check whether various thread queues are empty
  */
-STATIC_INLINE rtsBool
+INLINE_HEADER rtsBool
 emptyQueue (StgTSO *q)
 {
     return (q == END_TSO_QUEUE);
 }
 
-STATIC_INLINE rtsBool
+INLINE_HEADER rtsBool
 emptyRunQueue(Capability *cap)
 {
     return emptyQueue(cap->run_queue_hd);
 }
 
 #if defined(THREADED_RTS)
-STATIC_INLINE rtsBool
+INLINE_HEADER rtsBool
 emptyWakeupQueue(Capability *cap)
 {
     return emptyQueue(cap->wakeup_queue_hd);
@@ -305,7 +290,7 @@ emptyWakeupQueue(Capability *cap)
 #define EMPTY_SLEEPING_QUEUE() (emptyQueue(sleeping_queue))
 #endif
 
-STATIC_INLINE rtsBool
+INLINE_HEADER rtsBool
 emptyThreadQueues(Capability *cap)
 {
     return emptyRunQueue(cap)
@@ -315,14 +300,9 @@ emptyThreadQueues(Capability *cap)
     ;
 }
 
-#ifdef DEBUG
-void sched_belch(char *s, ...)
-   GNU_ATTRIBUTE(format (printf, 1, 2));
-#endif
-
 #endif /* !IN_STG_CODE */
 
-STATIC_INLINE void
+INLINE_HEADER void
 dirtyTSO (StgTSO *tso)
 {
     tso->flags |= TSO_DIRTY;