X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FSchedule.h;h=ddc7f561632ac760c56632fb89f7cd4e38a60933;hb=a98dfa6e445bdf6a5ac24b9496b51a21fd8113db;hp=c1cf1bffd97c01aa757d0df3f5c220f77733e10b;hpb=1b170b6ca71637cf3574eb1cbb7030c22459826d;p=ghc-hetmet.git diff --git a/ghc/rts/Schedule.h b/ghc/rts/Schedule.h index c1cf1bf..ddc7f56 100644 --- a/ghc/rts/Schedule.h +++ b/ghc/rts/Schedule.h @@ -1,5 +1,4 @@ /* ----------------------------------------------------------------------------- - * $Id: Schedule.h,v 1.43 2003/12/12 16:35: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,12 @@ StgTSO *unblockOne(StgTSO *tso); void raiseAsync(StgTSO *tso, StgClosure *exception); void raiseAsyncWithLock(StgTSO *tso, StgClosure *exception); +/* raiseExceptionHelper */ +StgWord raiseExceptionHelper (StgTSO *tso, StgClosure *exception); + +/* findRetryFrameHelper */ +StgWord findRetryFrameHelper (StgTSO *tso); + /* awaitEvent(rtsBool wait) * * Checks for blocked threads that need to be woken. @@ -127,11 +130,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,25 +144,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 thread_ready_cond; -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); @@ -204,6 +204,7 @@ typedef struct StgMainThread_ { Condition wakeup; #endif #endif + struct StgMainThread_ *prev; struct StgMainThread_ *link; } StgMainThread; @@ -281,17 +282,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) @@ -315,7 +305,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__ */