diff --git a/libkernel/src/sync/condvar.rs b/libkernel/src/sync/condvar.rs index c2b4833..49bf59d 100644 --- a/libkernel/src/sync/condvar.rs +++ b/libkernel/src/sync/condvar.rs @@ -51,7 +51,9 @@ impl CondVar { 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(), } } diff --git a/libkernel/src/sync/waker_set.rs b/libkernel/src/sync/waker_set.rs index 5d8ffd2..36a21b0 100644 --- a/libkernel/src/sync/waker_set.rs +++ b/libkernel/src/sync/waker_set.rs @@ -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 } }