X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FThreads.h;h=857658a2d08310fb211dcaa30f647a5def0e588b;hb=8625c675de45bdb8bcfa795572ce7c47687c147c;hp=f6d2dfd11a5d4c5adb8fc417f48bdfd2728365d2;hpb=dd56e9ab4544e83d27532a8d9058140bfe81825c;p=ghc-hetmet.git diff --git a/rts/Threads.h b/rts/Threads.h index f6d2dfd..857658a 100644 --- a/rts/Threads.h +++ b/rts/Threads.h @@ -9,29 +9,46 @@ #ifndef THREADS_H #define THREADS_H +#include "BeginPrivate.h" + +#define END_BLOCKED_EXCEPTIONS_QUEUE ((MessageThrowTo*)END_TSO_QUEUE) + StgTSO * unblockOne (Capability *cap, StgTSO *tso); StgTSO * unblockOne_ (Capability *cap, StgTSO *tso, rtsBool allow_migrate); -void awakenBlockedQueue (Capability *cap, StgTSO *tso); +void checkBlockingQueues (Capability *cap, StgTSO *tso); +void wakeBlockingQueue (Capability *cap, StgBlockingQueue *bq); +void tryWakeupThread (Capability *cap, StgTSO *tso); +void migrateThread (Capability *from, StgTSO *tso, Capability *to); + +// Wakes up a thread on a Capability (probably a different Capability +// from the one held by the current Task). +// +#ifdef THREADED_RTS +void wakeupThreadOnCapability (Capability *cap, + Capability *other_cap, + StgTSO *tso); +#endif -void removeThreadFromMVarQueue (Capability *cap, StgMVar *mvar, StgTSO *tso); -void removeThreadFromQueue (Capability *cap, StgTSO **queue, StgTSO *tso); -void removeThreadFromDeQueue (Capability *cap, StgTSO **head, StgTSO **tail, StgTSO *tso); +void updateThunk (Capability *cap, StgTSO *tso, + StgClosure *thunk, StgClosure *val); + +rtsBool removeThreadFromQueue (Capability *cap, StgTSO **queue, StgTSO *tso); +rtsBool removeThreadFromDeQueue (Capability *cap, StgTSO **head, StgTSO **tail, StgTSO *tso); StgBool isThreadBound (StgTSO* tso); +// Overfow/underflow +void threadStackOverflow (Capability *cap, StgTSO *tso); +nat threadStackUnderflow (Capability *cap, StgTSO *tso); + #ifdef DEBUG void printThreadBlockage (StgTSO *tso); void printThreadStatus (StgTSO *t); void printAllThreads (void); void printThreadQueue (StgTSO *t); -# if defined(PARALLEL_HASKELL) -void print_bq (StgClosure *node); -void print_bqe (StgBlockingQueueElement *bqe); -nat run_queue_len (void); -# elif defined(GRAN) -void print_bq (StgClosure *node); -# endif #endif +#include "EndPrivate.h" + #endif /* THREADS_H */