diff options
Diffstat (limited to 'embassy-sync/src/waitqueue')
| -rw-r--r-- | embassy-sync/src/waitqueue/atomic_waker_turbo.rs | 1 | ||||
| -rw-r--r-- | embassy-sync/src/waitqueue/multi_waker.rs | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/embassy-sync/src/waitqueue/atomic_waker_turbo.rs b/embassy-sync/src/waitqueue/atomic_waker_turbo.rs index c06b83056..a45adeab8 100644 --- a/embassy-sync/src/waitqueue/atomic_waker_turbo.rs +++ b/embassy-sync/src/waitqueue/atomic_waker_turbo.rs | |||
| @@ -7,6 +7,7 @@ use core::task::Waker; | |||
| 7 | /// If a waker is registered, registering another waker will replace the previous one without waking it. | 7 | /// If a waker is registered, registering another waker will replace the previous one without waking it. |
| 8 | /// The intended use case is to wake tasks from interrupts. Therefore, it is generally not expected, | 8 | /// The intended use case is to wake tasks from interrupts. Therefore, it is generally not expected, |
| 9 | /// that multiple tasks register try to register a waker simultaneously. | 9 | /// that multiple tasks register try to register a waker simultaneously. |
| 10 | #[derive(Debug)] | ||
| 10 | pub struct AtomicWaker { | 11 | pub struct AtomicWaker { |
| 11 | waker: AtomicPtr<()>, | 12 | waker: AtomicPtr<()>, |
| 12 | } | 13 | } |
diff --git a/embassy-sync/src/waitqueue/multi_waker.rs b/embassy-sync/src/waitqueue/multi_waker.rs index 0384d6bed..56c0cd1b2 100644 --- a/embassy-sync/src/waitqueue/multi_waker.rs +++ b/embassy-sync/src/waitqueue/multi_waker.rs | |||
| @@ -5,6 +5,7 @@ use heapless::Vec; | |||
| 5 | /// Utility struct to register and wake multiple wakers. | 5 | /// Utility struct to register and wake multiple wakers. |
| 6 | /// Queue of wakers with a maximum length of `N`. | 6 | /// Queue of wakers with a maximum length of `N`. |
| 7 | /// Intended for waking multiple tasks. | 7 | /// Intended for waking multiple tasks. |
| 8 | #[derive(Debug)] | ||
| 8 | pub struct MultiWakerRegistration<const N: usize> { | 9 | pub struct MultiWakerRegistration<const N: usize> { |
| 9 | wakers: Vec<Waker, N>, | 10 | wakers: Vec<Waker, N>, |
| 10 | } | 11 | } |
| @@ -15,7 +16,9 @@ impl<const N: usize> MultiWakerRegistration<N> { | |||
| 15 | Self { wakers: Vec::new() } | 16 | Self { wakers: Vec::new() } |
| 16 | } | 17 | } |
| 17 | 18 | ||
| 18 | /// Register a waker. If the buffer is full the function returns it in the error | 19 | /// Register a waker. |
| 20 | /// | ||
| 21 | /// If the buffer is full, [wakes all the wakers](Self::wake), clears its buffer and registers the waker. | ||
| 19 | pub fn register(&mut self, w: &Waker) { | 22 | pub fn register(&mut self, w: &Waker) { |
| 20 | // If we already have some waker that wakes the same task as `w`, do nothing. | 23 | // If we already have some waker that wakes the same task as `w`, do nothing. |
| 21 | // This avoids cloning wakers, and avoids unnecessary mass-wakes. | 24 | // This avoids cloning wakers, and avoids unnecessary mass-wakes. |
