/* put a stop frame on the stack */
tso->sp -= sizeofW(StgStopFrame);
SET_HDR((StgClosure*)tso->sp,(StgInfoTable *)&stg_stop_thread_info,CCS_SYSTEM);
- tso->link = END_TSO_QUEUE;
+ tso->_link = END_TSO_QUEUE;
// ToDo: check this
#if defined(GRAN)
*/
ACQUIRE_LOCK(&sched_mutex);
tso->id = next_thread_id++; // while we have the mutex
- tso->global_link = all_threads;
- all_threads = tso;
+ tso->global_link = g0s0->threads;
+ g0s0->threads = tso;
RELEASE_LOCK(&sched_mutex);
#if defined(DIST)
-------------------------------------------------------------------------- */
void
-removeThreadFromQueue (StgTSO **queue, StgTSO *tso)
+removeThreadFromQueue (Capability *cap, StgTSO **queue, StgTSO *tso)
{
StgTSO *t, *prev;
prev = NULL;
- for (t = *queue; t != END_TSO_QUEUE; prev = t, t = t->link) {
+ for (t = *queue; t != END_TSO_QUEUE; prev = t, t = t->_link) {
if (t == tso) {
if (prev) {
- prev->link = t->link;
+ setTSOLink(cap,prev,t->_link);
} else {
- *queue = t->link;
+ *queue = t->_link;
}
return;
}
}
void
-removeThreadFromDeQueue (StgTSO **head, StgTSO **tail, StgTSO *tso)
+removeThreadFromDeQueue (Capability *cap,
+ StgTSO **head, StgTSO **tail, StgTSO *tso)
{
StgTSO *t, *prev;
prev = NULL;
- for (t = *head; t != END_TSO_QUEUE; prev = t, t = t->link) {
+ for (t = *head; t != END_TSO_QUEUE; prev = t, t = t->_link) {
if (t == tso) {
if (prev) {
- prev->link = t->link;
+ setTSOLink(cap,prev,t->_link);
} else {
- *head = t->link;
+ *head = t->_link;
}
if (*tail == tso) {
if (prev) {
}
void
-removeThreadFromMVarQueue (StgMVar *mvar, StgTSO *tso)
+removeThreadFromMVarQueue (Capability *cap, StgMVar *mvar, StgTSO *tso)
{
- removeThreadFromDeQueue (&mvar->head, &mvar->tail, tso);
+ removeThreadFromDeQueue (cap, &mvar->head, &mvar->tail, tso);
}
/* ----------------------------------------------------------------------------
ASSERT(tso->why_blocked != NotBlocked);
tso->why_blocked = NotBlocked;
- next = tso->link;
- tso->link = END_TSO_QUEUE;
+ next = tso->_link;
+ tso->_link = END_TSO_QUEUE;
#if defined(THREADED_RTS)
if (tso->cap == cap || (!tsoLocked(tso) &&
* used by Control.Concurrent for error checking.
* ------------------------------------------------------------------------- */
-StgBool
+HsBool
rtsSupportsBoundThreads(void)
{
#if defined(THREADED_RTS)
- return rtsTrue;
+ return HS_BOOL_TRUE;
#else
- return rtsFalse;
+ return HS_BOOL_FALSE;
#endif
}
printAllThreads(void)
{
StgTSO *t, *next;
- nat i;
+ nat i, s;
Capability *cap;
# if defined(GRAN)
for (i = 0; i < n_capabilities; i++) {
cap = &capabilities[i];
debugBelch("threads on capability %d:\n", cap->no);
- for (t = cap->run_queue_hd; t != END_TSO_QUEUE; t = t->link) {
+ for (t = cap->run_queue_hd; t != END_TSO_QUEUE; t = t->_link) {
printThreadStatus(t);
}
}
debugBelch("other threads:\n");
- for (t = all_threads; t != END_TSO_QUEUE; t = next) {
+ for (s = 0; s < total_steps; s++) {
+ for (t = all_steps[s].threads; t != END_TSO_QUEUE; t = next) {
if (t->why_blocked != NotBlocked) {
printThreadStatus(t);
}
if (t->what_next == ThreadRelocated) {
- next = t->link;
+ next = t->_link;
} else {
next = t->global_link;
}
+ }
}
}
printThreadQueue(StgTSO *t)
{
nat i = 0;
- for (; t != END_TSO_QUEUE; t = t->link) {
+ for (; t != END_TSO_QUEUE; t = t->_link) {
printThreadStatus(t);
i++;
}