X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FThreads.h;h=bf16dcdce36b08d9c55533d95f1886c12025f6b8;hb=661c97c65e5fa47177502e592bb763f752b487ac;hp=8e0ee264f440ba58e18709fb94b8122994d12451;hpb=9a9803e8dc80ba41bd3e2d31228e64fa6b61060e;p=ghc-hetmet.git diff --git a/rts/Threads.h b/rts/Threads.h index 8e0ee26..bf16dcd 100644 --- a/rts/Threads.h +++ b/rts/Threads.h @@ -11,14 +11,33 @@ BEGIN_RTS_PRIVATE +#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); + +// like tryWakeupThread(), but assumes the TSO is not ThreadRelocated +void tryWakeupThread_ (Capability *cap, StgTSO *tso); + +// 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 updateThunk (Capability *cap, StgTSO *tso, + StgClosure *thunk, StgClosure *val); -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); +rtsBool removeThreadFromQueue (Capability *cap, StgTSO **queue, StgTSO *tso); +rtsBool removeThreadFromDeQueue (Capability *cap, StgTSO **head, StgTSO **tail, StgTSO *tso); StgBool isThreadBound (StgTSO* tso);