aboutsummaryrefslogtreecommitdiff
path: root/embassy-sync/src/waitqueue
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-sync/src/waitqueue')
-rw-r--r--embassy-sync/src/waitqueue/atomic_waker_turbo.rs1
-rw-r--r--embassy-sync/src/waitqueue/multi_waker.rs5
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)]
10pub struct AtomicWaker { 11pub 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)]
8pub struct MultiWakerRegistration<const N: usize> { 9pub 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.