Cleanup failure handling around rust_new_task_in_sched - closes #2668
This commit is contained in:
parent
d91e310982
commit
6fc730baf6
5 changed files with 9 additions and 3 deletions
|
@ -538,6 +538,7 @@ fn spawn_raw(opts: task_opts, +f: fn~()) {
|
||||||
new_task_in_new_sched(sched_opts)
|
new_task_in_new_sched(sched_opts)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
assert !new_task.is_null();
|
||||||
|
|
||||||
option::iter(opts.notify_chan) {|c|
|
option::iter(opts.notify_chan) {|c|
|
||||||
// FIXME (#1087): Would like to do notification in Rust
|
// FIXME (#1087): Would like to do notification in Rust
|
||||||
|
|
|
@ -95,6 +95,7 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
|
||||||
// Create the main scheduler and the main task
|
// Create the main scheduler and the main task
|
||||||
rust_sched_id sched_id = kernel->create_scheduler(env->num_sched_threads);
|
rust_sched_id sched_id = kernel->create_scheduler(env->num_sched_threads);
|
||||||
rust_scheduler *sched = kernel->get_scheduler_by_id(sched_id);
|
rust_scheduler *sched = kernel->get_scheduler_by_id(sched_id);
|
||||||
|
assert(sched != NULL);
|
||||||
rust_task *root_task = sched->create_task(NULL, "main");
|
rust_task *root_task = sched->create_task(NULL, "main");
|
||||||
|
|
||||||
// Build the command line arguments to pass to the root task
|
// Build the command line arguments to pass to the root task
|
||||||
|
|
|
@ -630,7 +630,8 @@ extern "C" CDECL rust_task*
|
||||||
rust_new_task_in_sched(rust_sched_id id) {
|
rust_new_task_in_sched(rust_sched_id id) {
|
||||||
rust_task *task = rust_get_current_task();
|
rust_task *task = rust_get_current_task();
|
||||||
rust_scheduler *sched = task->kernel->get_scheduler_by_id(id);
|
rust_scheduler *sched = task->kernel->get_scheduler_by_id(id);
|
||||||
// FIXME (#2668): What if we didn't get the scheduler?
|
if (sched == NULL)
|
||||||
|
return NULL;
|
||||||
return new_task_common(sched, task);
|
return new_task_common(sched, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,9 @@ rust_kernel::get_scheduler_by_id(rust_sched_id id) {
|
||||||
|
|
||||||
rust_scheduler *
|
rust_scheduler *
|
||||||
rust_kernel::get_scheduler_by_id_nolock(rust_sched_id id) {
|
rust_kernel::get_scheduler_by_id_nolock(rust_sched_id id) {
|
||||||
assert(id != 0 && "invalid scheduler id");
|
if (id == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
sched_lock.must_have_lock();
|
sched_lock.must_have_lock();
|
||||||
sched_map::iterator iter = sched_table.find(id);
|
sched_map::iterator iter = sched_table.find(id);
|
||||||
if (iter != sched_table.end()) {
|
if (iter != sched_table.end()) {
|
||||||
|
|
|
@ -22,6 +22,7 @@ fn main() unsafe {
|
||||||
let new_sched_id = rustrt::rust_new_sched(num_threads);
|
let new_sched_id = rustrt::rust_new_sched(num_threads);
|
||||||
#error("new_sched_id %?", new_sched_id);
|
#error("new_sched_id %?", new_sched_id);
|
||||||
let new_task_id = rustrt::rust_new_task_in_sched(new_sched_id);
|
let new_task_id = rustrt::rust_new_task_in_sched(new_sched_id);
|
||||||
|
assert !new_task_id.is_null();
|
||||||
let f = fn~() {
|
let f = fn~() {
|
||||||
let child_sched_id = rustrt::rust_get_sched_id();
|
let child_sched_id = rustrt::rust_get_sched_id();
|
||||||
#error("child_sched_id %?", child_sched_id);
|
#error("child_sched_id %?", child_sched_id);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue