Make wake_task
safe
This commit is contained in:
parent
48e1aab762
commit
b6ca6d699a
@ -444,14 +444,10 @@ impl Executor {
|
||||
}
|
||||
}
|
||||
|
||||
/// Wake a task by raw pointer.
|
||||
/// Wake a task by `TaskRef`.
|
||||
///
|
||||
/// You can obtain task pointers from `Waker`s using [`task_from_waker`].
|
||||
///
|
||||
/// # Safety
|
||||
///
|
||||
/// `task` must be a valid task pointer obtained from [`task_from_waker`].
|
||||
pub unsafe fn wake_task(task: TaskRef) {
|
||||
/// You can obtain a `TaskRef` from a `Waker` using [`task_from_waker`].
|
||||
pub fn wake_task(task: TaskRef) {
|
||||
critical_section::with(|cs| {
|
||||
let header = task.header();
|
||||
let state = header.state.load(Ordering::Relaxed);
|
||||
@ -465,8 +461,10 @@ pub unsafe fn wake_task(task: TaskRef) {
|
||||
header.state.store(state | STATE_RUN_QUEUED, Ordering::Relaxed);
|
||||
|
||||
// We have just marked the task as scheduled, so enqueue it.
|
||||
unsafe {
|
||||
let executor = &*header.executor.get();
|
||||
executor.enqueue(cs, task);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user