|
@@ -1,7 +1,7 @@
|
|
|
mod prepare;
|
|
mod prepare;
|
|
|
mod wait_object;
|
|
mod wait_object;
|
|
|
|
|
|
|
|
-use crate::Spin;
|
|
|
|
|
|
|
+use crate::{LazyLock, Spin};
|
|
|
use core::{fmt, sync::atomic::Ordering};
|
|
use core::{fmt, sync::atomic::Ordering};
|
|
|
use intrusive_collections::LinkedList;
|
|
use intrusive_collections::LinkedList;
|
|
|
use wait_object::WaitObjectAdapter;
|
|
use wait_object::WaitObjectAdapter;
|
|
@@ -9,13 +9,13 @@ use wait_object::WaitObjectAdapter;
|
|
|
pub use prepare::Prepare;
|
|
pub use prepare::Prepare;
|
|
|
|
|
|
|
|
pub struct WaitList {
|
|
pub struct WaitList {
|
|
|
- waiters: Spin<LinkedList<WaitObjectAdapter>>,
|
|
|
|
|
|
|
+ waiters: LazyLock<Spin<LinkedList<WaitObjectAdapter>>>,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
impl WaitList {
|
|
impl WaitList {
|
|
|
- pub fn new() -> Self {
|
|
|
|
|
|
|
+ pub const fn new() -> Self {
|
|
|
Self {
|
|
Self {
|
|
|
- waiters: Spin::new(LinkedList::new(WaitObjectAdapter::new())),
|
|
|
|
|
|
|
+ waiters: LazyLock::new(|| Spin::new(LinkedList::new(WaitObjectAdapter::new()))),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -43,7 +43,7 @@ impl WaitList {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
pub fn notify_all(&self) -> usize {
|
|
pub fn notify_all(&self) -> usize {
|
|
|
- let mut waiters = self.waiters.lock().take();
|
|
|
|
|
|
|
+ let mut waiters = self.waiters.lock();
|
|
|
let mut waiter = waiters.front_mut();
|
|
let mut waiter = waiters.front_mut();
|
|
|
let mut count = 0;
|
|
let mut count = 0;
|
|
|
|
|
|
|
@@ -76,6 +76,12 @@ impl WaitList {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+impl Default for WaitList {
|
|
|
|
|
+ fn default() -> Self {
|
|
|
|
|
+ Self::new()
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
impl fmt::Debug for WaitList {
|
|
impl fmt::Debug for WaitList {
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
|
f.debug_struct("WaitList").finish()
|
|
f.debug_struct("WaitList").finish()
|