*/
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)
appendToRunQueue(cap,tso);
// we're holding a newly woken thread, make sure we context switch
// quickly so we can migrate it if necessary.
- context_switch = 1;
+ cap->context_switch = 1;
} else {
// we'll try to wake it up on the Capability it was last on.
- wakeupThreadOnCapability_lock(tso->cap, tso);
+ wakeupThreadOnCapability(cap, tso->cap, tso);
}
#else
appendToRunQueue(cap,tso);
- context_switch = 1;
+ cap->context_switch = 1;
#endif
debugTrace(DEBUG_sched,
break;
#if defined(mingw32_HOST_OS)
case BlockedOnDoProc:
- debugBelch("is blocked on proc (request: %ld)", tso->block_info.async_result->reqID);
+ debugBelch("is blocked on proc (request: %u)", tso->block_info.async_result->reqID);
break;
#endif
case BlockedOnDelay:
printAllThreads(void)
{
StgTSO *t, *next;
- nat i;
+ nat i, s;
Capability *cap;
# if defined(GRAN)
}
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);
}
} else {
next = t->global_link;
}
+ }
}
}