diff options
| -rw-r--r-- | embassy-executor/src/raw/mod.rs | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/embassy-executor/src/raw/mod.rs b/embassy-executor/src/raw/mod.rs index 10a154a9f..183c5e6a2 100644 --- a/embassy-executor/src/raw/mod.rs +++ b/embassy-executor/src/raw/mod.rs | |||
| @@ -444,14 +444,10 @@ impl Executor { | |||
| 444 | } | 444 | } |
| 445 | } | 445 | } |
| 446 | 446 | ||
| 447 | /// Wake a task by raw pointer. | 447 | /// Wake a task by `TaskRef`. |
| 448 | /// | 448 | /// |
| 449 | /// You can obtain task pointers from `Waker`s using [`task_from_waker`]. | 449 | /// You can obtain a `TaskRef` from a `Waker` using [`task_from_waker`]. |
| 450 | /// | 450 | pub fn wake_task(task: TaskRef) { |
| 451 | /// # Safety | ||
| 452 | /// | ||
| 453 | /// `task` must be a valid task pointer obtained from [`task_from_waker`]. | ||
| 454 | pub unsafe fn wake_task(task: TaskRef) { | ||
| 455 | critical_section::with(|cs| { | 451 | critical_section::with(|cs| { |
| 456 | let header = task.header(); | 452 | let header = task.header(); |
| 457 | let state = header.state.load(Ordering::Relaxed); | 453 | let state = header.state.load(Ordering::Relaxed); |
| @@ -465,8 +461,10 @@ pub unsafe fn wake_task(task: TaskRef) { | |||
| 465 | header.state.store(state | STATE_RUN_QUEUED, Ordering::Relaxed); | 461 | header.state.store(state | STATE_RUN_QUEUED, Ordering::Relaxed); |
| 466 | 462 | ||
| 467 | // We have just marked the task as scheduled, so enqueue it. | 463 | // We have just marked the task as scheduled, so enqueue it. |
| 468 | let executor = &*header.executor.get(); | 464 | unsafe { |
| 469 | executor.enqueue(cs, task); | 465 | let executor = &*header.executor.get(); |
| 466 | executor.enqueue(cs, task); | ||
| 467 | } | ||
| 470 | }) | 468 | }) |
| 471 | } | 469 | } |
| 472 | 470 | ||
