X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FSchedule.h;h=516cabfb31da4267880c143223a9e7e8502ccd90;hb=845db8182942e006a9164e41e9839adb39f24268;hp=7e1248262d5b56ea0a7eb8d80a0d09ed1932d217;hpb=9d571fb7692ee9fcfd14f583af2ca4072f0e44f8;p=ghc-hetmet.git diff --git a/ghc/rts/Schedule.h b/ghc/rts/Schedule.h index 7e12482..516cabf 100644 --- a/ghc/rts/Schedule.h +++ b/ghc/rts/Schedule.h @@ -1,5 +1,4 @@ /* ----------------------------------------------------------------------------- - * $Id: Schedule.h,v 1.44 2004/02/26 16:14:21 simonmar Exp $ * * (c) The GHC Team 1998-1999 * @@ -33,10 +32,8 @@ void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node); #elif defined(PAR) void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node); #else -void awakenBlockedQueue(StgTSO *tso); -#if defined(RTS_SUPPORTS_THREADS) -void awakenBlockedQueueNoLock(StgTSO *tso); -#endif +void awakenBlockedQueue (StgTSO *tso); +void awakenBlockedQueueNoLock (StgTSO *tso); #endif /* unblockOne() @@ -63,6 +60,9 @@ StgTSO *unblockOne(StgTSO *tso); void raiseAsync(StgTSO *tso, StgClosure *exception); void raiseAsyncWithLock(StgTSO *tso, StgClosure *exception); +/* raiseExceptionHelper */ +StgWord raiseExceptionHelper (StgTSO *tso, StgClosure *exception); + /* awaitEvent(rtsBool wait) * * Checks for blocked threads that need to be woken. @@ -127,11 +127,11 @@ void initThread(StgTSO *tso, nat stack_size); /* Context switch flag. * Locks required : sched_mutex */ -extern nat context_switch; -extern rtsBool interrupted; +extern int RTS_VAR(context_switch); +extern rtsBool RTS_VAR(interrupted); /* In Select.c */ -extern nat timestamp; +extern nat RTS_VAR(timestamp); /* Thread queues. * Locks required : sched_mutex @@ -141,24 +141,22 @@ extern nat timestamp; #if defined(GRAN) // run_queue_hds defined in GranSim.h #else -extern StgTSO *run_queue_hd, *run_queue_tl; -extern StgTSO *blocked_queue_hd, *blocked_queue_tl; -extern StgTSO *sleeping_queue; +extern StgTSO *RTS_VAR(run_queue_hd), *RTS_VAR(run_queue_tl); +extern StgTSO *RTS_VAR(blocked_queue_hd), *RTS_VAR(blocked_queue_tl); +extern StgTSO *RTS_VAR(sleeping_queue); #endif /* Linked list of all threads. */ -extern StgTSO *all_threads; +extern StgTSO *RTS_VAR(all_threads); #if defined(RTS_SUPPORTS_THREADS) /* Schedule.c has detailed info on what these do */ -extern Mutex sched_mutex; -extern Condition returning_worker_cond; -extern nat rts_n_waiting_workers; -extern nat rts_n_waiting_tasks; +extern Mutex RTS_VAR(sched_mutex); +extern Condition RTS_VAR(returning_worker_cond); +extern nat RTS_VAR(rts_n_waiting_workers); +extern nat RTS_VAR(rts_n_waiting_tasks); #endif -StgBool rtsSupportsBoundThreads(void); StgBool isThreadBound(StgTSO *tso); -StgInt forkProcess(HsStablePtr *entry); extern SchedulerStatus rts_mainLazyIO(HaskellObj p, /*out*/HaskellObj *ret); @@ -203,6 +201,7 @@ typedef struct StgMainThread_ { Condition wakeup; #endif #endif + struct StgMainThread_ *prev; struct StgMainThread_ *link; } StgMainThread; @@ -280,17 +279,6 @@ void labelThread(StgPtr tso, char *label); } \ blocked_queue_tl = tso; -/* Signal that a runnable thread has become available, in - * case there are any waiting tasks to execute it. - */ -#if defined(RTS_SUPPORTS_THREADS) -#define THREAD_RUNNABLE() \ - wakeBlockedWorkerThread(); \ - context_switch = 1; -#else -#define THREAD_RUNNABLE() /* nothing */ -#endif - /* Check whether various thread queues are empty */ #define EMPTY_QUEUE(q) (q == END_TSO_QUEUE) @@ -314,7 +302,8 @@ startSchedulerTaskIfNecessary(void); #endif #ifdef DEBUG -extern void sched_belch(char *s, ...); +extern void sched_belch(char *s, ...) + GNU_ATTRIBUTE(format (printf, 1, 2)); #endif #endif /* __SCHEDULE_H__ */