deleteRunQueue(cap);
if (shutting_down_scheduler) {
IF_DEBUG(scheduler, sched_belch("shutting down"));
+ // If we are a worker, just exit. If we're a bound thread
+ // then we will exit below when we've removed our TSO from
+ // the run queue.
+ if (task->tso == NULL) {
+ return cap;
+ }
} else {
IF_DEBUG(scheduler, sched_belch("interrupted"));
}
if (pid) { // parent
// just return the pid
+ rts_unlock(cap);
return pid;
} else { // child
cap = schedule(cap,task);
ASSERT(task->stat != NoStatus);
+ ASSERT(cap->running_task == task);
+ ASSERT(task->cap == cap);
IF_DEBUG(scheduler, sched_belch("bound thread (%d) finished", task->tso->id));
return cap;