diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-12-16 14:46:08 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-12-16 14:46:08 +0000 |
| commit | 47e96beff4fc4c8dff8bf6d6a67e1d2e81c40495 (patch) | |
| tree | bee175817d7dc3119c5533bd78069cd6ce0a7f44 /embassy-executor/src/raw/run_queue_critical_section.rs | |
| parent | 2c3bc75da6008afa7cacc1045954cef7e3d8740f (diff) | |
| parent | f389ba37219d842d7db0ab94cd421c69645a5757 (diff) | |
Merge pull request #3644 from bugadani/lock_once
Only lock once to wake a task
Diffstat (limited to 'embassy-executor/src/raw/run_queue_critical_section.rs')
| -rw-r--r-- | embassy-executor/src/raw/run_queue_critical_section.rs | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/embassy-executor/src/raw/run_queue_critical_section.rs b/embassy-executor/src/raw/run_queue_critical_section.rs index ba59c8f29..90f09e8c8 100644 --- a/embassy-executor/src/raw/run_queue_critical_section.rs +++ b/embassy-executor/src/raw/run_queue_critical_section.rs | |||
| @@ -44,13 +44,11 @@ impl RunQueue { | |||
| 44 | /// | 44 | /// |
| 45 | /// `item` must NOT be already enqueued in any queue. | 45 | /// `item` must NOT be already enqueued in any queue. |
| 46 | #[inline(always)] | 46 | #[inline(always)] |
| 47 | pub(crate) unsafe fn enqueue(&self, task: TaskRef) -> bool { | 47 | pub(crate) unsafe fn enqueue(&self, task: TaskRef, cs: CriticalSection<'_>) -> bool { |
| 48 | critical_section::with(|cs| { | 48 | let prev = self.head.borrow(cs).replace(Some(task)); |
| 49 | let prev = self.head.borrow(cs).replace(Some(task)); | 49 | task.header().run_queue_item.next.borrow(cs).set(prev); |
| 50 | task.header().run_queue_item.next.borrow(cs).set(prev); | ||
| 51 | 50 | ||
| 52 | prev.is_none() | 51 | prev.is_none() |
| 53 | }) | ||
| 54 | } | 52 | } |
| 55 | 53 | ||
| 56 | /// Empty the queue, then call `on_task` for each task that was in the queue. | 54 | /// Empty the queue, then call `on_task` for each task that was in the queue. |
