Lock the new task's scheduler when creating a task
Previously we were locking the spawning task's scheduler. I couldn't see that that was protecting anything. The newborn_task list in the new task's scheduler though was unprotected from concurrent access. So now we're locking the new task's scheduler.
This commit is contained in:
parent
96a629d2fa
commit
6657e729de
2 changed files with 3 additions and 2 deletions
|
|
@ -135,7 +135,9 @@ int rust_kernel::start_task_threads()
|
|||
|
||||
rust_task *
|
||||
rust_kernel::create_task(rust_task *spawner, const char *name) {
|
||||
return threads[rand(&rctx) % num_threads]->create_task(spawner, name);
|
||||
rust_scheduler *thread = threads[rand(&rctx) % num_threads];
|
||||
scoped_lock with(thread->lock);
|
||||
return thread->create_task(spawner, name);
|
||||
}
|
||||
|
||||
void rust_kernel::wakeup_schedulers() {
|
||||
|
|
|
|||
|
|
@ -526,7 +526,6 @@ extern "C" CDECL rust_task *
|
|||
upcall_new_task(rust_task *spawner, rust_vec *name) {
|
||||
// name is a rust string structure.
|
||||
LOG_UPCALL_ENTRY(spawner);
|
||||
scoped_lock with(spawner->sched->lock);
|
||||
rust_task *task =
|
||||
spawner->kernel->create_task(spawner, (const char *)name->data);
|
||||
task->ref();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue