diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp index 740667340cde..0318d9801f1b 100644 --- a/src/rt/rust_scheduler.cpp +++ b/src/rt/rust_scheduler.cpp @@ -291,6 +291,8 @@ rust_scheduler::create_task(rust_task *spawner, const char *name) { new (this->kernel) rust_task (this, &newborn_tasks, spawner, name); DLOG(this, task, "created task: " PTR ", spawner: %s, name: %s", task, spawner ? spawner->name : "null", name); + if(spawner) + task->pin(spawner->pinned_on); newborn_tasks.append(task); return task; } diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index 46c9aebe6cfe..b2a60dc92bc0 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -528,9 +528,15 @@ rust_task::free(void *mem, memory_region::memory_region_type type) { } void rust_task::pin() { + I(this->sched, running_on != -1); pinned_on = running_on; } +void rust_task::pin(int id) { + I(this->sched, running_on == -1); + pinned_on = id; +} + void rust_task::unpin() { pinned_on = -1; } diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h index 428e3c139932..f2aa7846c54c 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -154,6 +154,7 @@ rust_task : public maybe_proxy, void free(void *mem, memory_region::memory_region_type type); void pin(); + void pin(int id); void unpin(); };