libkernel: waker_set: return whether a waker was woken

Make `wake_one()` return `true` indicating whether a waker was woken
from the set, `false` otherwise.
This commit is contained in:
Matthew Leach
2025-12-23 04:36:58 +00:00
parent 1dd1811f34
commit 9608d6b2ee
2 changed files with 9 additions and 2 deletions

View File

@@ -51,7 +51,9 @@ impl<S, C: CpuOps> CondVar<S, C> {
match updater(&mut inner.state) {
WakeupType::None => (),
WakeupType::One => inner.wakers.wake_one(),
WakeupType::One => {
inner.wakers.wake_one();
}
WakeupType::All => inner.wakers.wake_all(),
}
}

View File

@@ -54,9 +54,14 @@ impl WakerSet {
}
/// Wakes one waiting task, if any.
pub fn wake_one(&mut self) {
///
/// Returns `true` if a waker was awoken, `false` otherwise.
pub fn wake_one(&mut self) -> bool {
if let Some((_, waker)) = self.waiters.pop_first() {
waker.wake();
true
} else {
false
}
}