Add asserts to check fail_sched_loop() only once
This commit is contained in:
@@ -129,11 +129,17 @@ cleanup_task(cleanup_args *args) {
|
||||
// assert(task->task_local_data != NULL);
|
||||
task->task_local_data_cleanup(task->task_local_data);
|
||||
task->task_local_data = NULL;
|
||||
} else if (threw_exception) {
|
||||
} else if (threw_exception && task->id == INIT_TASK_ID) {
|
||||
// Edge case: If main never spawns any tasks, but fails anyway, TLS
|
||||
// won't be around to take down the kernel (task.rs:kill_taskgroup,
|
||||
// rust_task_kill_all). Do it here instead.
|
||||
// (Note that children tasks can not init their TLS if they were
|
||||
// killed too early, so we need to check main's task id too.)
|
||||
task->fail_sched_loop();
|
||||
// This must not happen twice.
|
||||
static bool main_task_failed_without_spawning = false;
|
||||
assert(!main_task_failed_without_spawning);
|
||||
main_task_failed_without_spawning = true;
|
||||
}
|
||||
|
||||
// FIXME (#2676): For performance we should do the annihilator
|
||||
|
||||
Reference in New Issue
Block a user