X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FSchedAPI.h;h=63d2d0993c58044434cfa0ff4f5708f84bda1041;hb=01774b0926834a3b9f6df288a617a747e1e67551;hp=809d53c5b7cca49eff9bdbaf2daf0595297747ba;hpb=9ac55e08e159d7a4647ab01e7872e69dd762f275;p=ghc-hetmet.git diff --git a/ghc/includes/SchedAPI.h b/ghc/includes/SchedAPI.h index 809d53c..63d2d09 100644 --- a/ghc/includes/SchedAPI.h +++ b/ghc/includes/SchedAPI.h @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------------- - * $Id: SchedAPI.h,v 1.12 2000/12/04 12:31:20 simonmar Exp $ + * $Id: SchedAPI.h,v 1.16 2002/12/11 15:36:39 simonmar Exp $ * - * (c) The GHC Team 1998 + * (c) The GHC Team 1998-2002 * * External API for the scheduler. For most uses, the functions in * RtsAPI.h should be enough. @@ -16,33 +16,27 @@ #define NO_PRI 0 #endif -/* - * schedule() plus the thread creation functions are not part - * part of the external RTS API, so leave them out if we're - * not compiling rts/ bits. -- sof 7/99 - * - */ -SchedulerStatus waitThread(StgTSO *main_thread, /*out*/StgClosure **ret); +extern SchedulerStatus waitThread(StgTSO *main_thread, /*out*/StgClosure **ret); /* * Creating threads */ #if defined(GRAN) -StgTSO *createThread(nat stack_size, StgInt pri); +extern StgTSO *createThread(nat stack_size, StgInt pri); #else -StgTSO *createThread(nat stack_size); +extern StgTSO *createThread(nat stack_size); +#endif +#if defined(PAR) || defined(SMP) +extern void taskStart(void); #endif -void scheduleThread(StgTSO *tso); +extern void scheduleThread(StgTSO *tso); +extern SchedulerStatus scheduleWaitThread(StgTSO *tso, /*out*/HaskellObj* ret); -static inline void pushClosure (StgTSO *tso, StgClosure *c) { +static inline void pushClosure (StgTSO *tso, StgWord c) { tso->sp--; tso->sp[0] = (W_) c; } -static inline void pushRealWorld (StgTSO *tso) { - tso->sp--; - tso->sp[0] = (W_) REALWORLD_TAG; -} static inline StgTSO * createGenThread(nat stack_size, StgClosure *closure) { StgTSO *t; @@ -51,7 +45,8 @@ createGenThread(nat stack_size, StgClosure *closure) { #else t = createThread(stack_size); #endif - pushClosure(t,closure); + pushClosure(t, (W_)closure); + pushClosure(t, (W_)&stg_enter_info); return t; } @@ -63,8 +58,10 @@ createIOThread(nat stack_size, StgClosure *closure) { #else t = createThread(stack_size); #endif - pushRealWorld(t); - pushClosure(t,closure); + pushClosure(t, (W_)&stg_noforceIO_info); + pushClosure(t, (W_)&stg_ap_v_info); + pushClosure(t, (W_)closure); + pushClosure(t, (W_)&stg_enter_info); return t; } @@ -81,8 +78,10 @@ createStrictIOThread(nat stack_size, StgClosure *closure) { #else t = createThread(stack_size); #endif - pushClosure(t,closure); - pushClosure(t,(StgClosure*)&stg_forceIO_closure); + pushClosure(t, (W_)&stg_forceIO_info); + pushClosure(t, (W_)&stg_ap_v_info); + pushClosure(t, (W_)closure); + pushClosure(t, (W_)&stg_enter_info); return t; }