aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src/raw/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-executor/src/raw/mod.rs')
-rw-r--r--embassy-executor/src/raw/mod.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/embassy-executor/src/raw/mod.rs b/embassy-executor/src/raw/mod.rs
index 7da14468d..bcbd214a9 100644
--- a/embassy-executor/src/raw/mod.rs
+++ b/embassy-executor/src/raw/mod.rs
@@ -386,11 +386,11 @@ impl SyncExecutor {
386 /// - `task` must be set up to run in this executor. 386 /// - `task` must be set up to run in this executor.
387 /// - `task` must NOT be already enqueued (in this executor or another one). 387 /// - `task` must NOT be already enqueued (in this executor or another one).
388 #[inline(always)] 388 #[inline(always)]
389 unsafe fn enqueue(&self, task: TaskRef) { 389 unsafe fn enqueue(&self, task: TaskRef, l: state::Token) {
390 #[cfg(feature = "trace")] 390 #[cfg(feature = "trace")]
391 trace::task_ready_begin(self, &task); 391 trace::task_ready_begin(self, &task);
392 392
393 if self.run_queue.enqueue(task) { 393 if self.run_queue.enqueue(task, l) {
394 self.pender.pend(); 394 self.pender.pend();
395 } 395 }
396 } 396 }
@@ -401,7 +401,9 @@ impl SyncExecutor {
401 #[cfg(feature = "trace")] 401 #[cfg(feature = "trace")]
402 trace::task_new(self, &task); 402 trace::task_new(self, &task);
403 403
404 self.enqueue(task); 404 state::locked(|l| {
405 self.enqueue(task, l);
406 })
405 } 407 }
406 408
407 /// # Safety 409 /// # Safety
@@ -544,13 +546,13 @@ impl Executor {
544/// You can obtain a `TaskRef` from a `Waker` using [`task_from_waker`]. 546/// You can obtain a `TaskRef` from a `Waker` using [`task_from_waker`].
545pub fn wake_task(task: TaskRef) { 547pub fn wake_task(task: TaskRef) {
546 let header = task.header(); 548 let header = task.header();
547 if header.state.run_enqueue() { 549 header.state.run_enqueue(|l| {
548 // We have just marked the task as scheduled, so enqueue it. 550 // We have just marked the task as scheduled, so enqueue it.
549 unsafe { 551 unsafe {
550 let executor = header.executor.get().unwrap_unchecked(); 552 let executor = header.executor.get().unwrap_unchecked();
551 executor.enqueue(task); 553 executor.enqueue(task, l);
552 } 554 }
553 } 555 });
554} 556}
555 557
556/// Wake a task by `TaskRef` without calling pend. 558/// Wake a task by `TaskRef` without calling pend.
@@ -558,11 +560,11 @@ pub fn wake_task(task: TaskRef) {
558/// You can obtain a `TaskRef` from a `Waker` using [`task_from_waker`]. 560/// You can obtain a `TaskRef` from a `Waker` using [`task_from_waker`].
559pub fn wake_task_no_pend(task: TaskRef) { 561pub fn wake_task_no_pend(task: TaskRef) {
560 let header = task.header(); 562 let header = task.header();
561 if header.state.run_enqueue() { 563 header.state.run_enqueue(|l| {
562 // We have just marked the task as scheduled, so enqueue it. 564 // We have just marked the task as scheduled, so enqueue it.
563 unsafe { 565 unsafe {
564 let executor = header.executor.get().unwrap_unchecked(); 566 let executor = header.executor.get().unwrap_unchecked();
565 executor.run_queue.enqueue(task); 567 executor.run_queue.enqueue(task, l);
566 } 568 }
567 } 569 });
568} 570}