Unsupervise tasks before the scheduler kills them. Unblock before yield->fail
This commit is contained in:
parent
69eda46af8
commit
a0ad9a42cd
@ -81,10 +81,14 @@ rust_scheduler::kill_all_tasks() {
|
||||
scoped_lock with(lock);
|
||||
|
||||
for (size_t i = 0; i < running_tasks.length(); i++) {
|
||||
// We don't want the failure of these tasks to propagate back
|
||||
// to the kernel again since we're already failing everything
|
||||
running_tasks[i]->unsupervise();
|
||||
running_tasks[i]->kill();
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < blocked_tasks.length(); i++) {
|
||||
blocked_tasks[i]->unsupervise();
|
||||
blocked_tasks[i]->kill();
|
||||
}
|
||||
}
|
||||
|
@ -255,6 +255,9 @@ rust_task::yield(size_t time_in_us) {
|
||||
name, this, time_in_us);
|
||||
|
||||
if (killed) {
|
||||
if (blocked()) {
|
||||
unblock();
|
||||
}
|
||||
killed = false;
|
||||
fail();
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
// -*- rust -*-
|
||||
// xfail-test
|
||||
// error-pattern:1 == 2
|
||||
use std;
|
||||
import std::task;
|
||||
@ -24,8 +23,8 @@ fn sleeper() {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let f = parent;
|
||||
let g = sleeper;
|
||||
task::spawn(f);
|
||||
task::spawn(g);
|
||||
let f = parent;
|
||||
task::spawn(f);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user