rt: Shutdown gracefully on failure

When the kernel fails, kill all tasks and wait for the schedulers to stop
instead of just exiting. I'm sure there are tons of lurking issues here but
this is enough to fail without leaking (at least in the absence of cleanups).
This commit is contained in:
Brian Anderson
2011-08-10 12:57:53 -07:00
parent f6ad051408
commit 0cd607bcbd
5 changed files with 28 additions and 2 deletions

View File

@@ -71,7 +71,21 @@ rust_scheduler::fail() {
name, this);
I(this, kernel->rval == 0);
kernel->rval = 1;
exit(1);
kernel->fail();
}
void
rust_scheduler::kill_all_tasks() {
I(this, !lock.lock_held_by_current_thread());
scoped_lock with(lock);
for (size_t i = 0; i < running_tasks.length(); i++) {
running_tasks[i]->kill();
}
for (size_t i = 0; i < blocked_tasks.length(); i++) {
blocked_tasks[i]->kill();
}
}
size_t