Skip to content

Commit

Permalink
Fix code review/CI issues
Browse files Browse the repository at this point in the history
  • Loading branch information
notgull committed Mar 31, 2023
1 parent bc07d43 commit 17952d6
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 25 deletions.
8 changes: 4 additions & 4 deletions benches/bench.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::iter;
use std::pin::Pin;

use criterion::{criterion_group, criterion_main, Criterion};
Expand All @@ -8,10 +9,9 @@ const COUNT: usize = 8000;
fn bench_events(c: &mut Criterion) {
c.bench_function("notify_and_wait", |b| {
let ev = Event::new();
let mut handles = Vec::with_capacity(COUNT);
for _ in 0..COUNT {
handles.push(EventListener::new(&ev));
}
let mut handles = iter::repeat_with(|| EventListener::new(&ev))
.take(COUNT)
.collect::<Vec<_>>();

b.iter(|| {
for handle in &mut handles {
Expand Down
53 changes: 32 additions & 21 deletions src/no_std.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ impl crate::Inner {
// Slow path removal.
// This is why intrusive lists don't work on no_std.
let node = Node::RemoveListener {
key,
listener: key,
propagate: propogate,
};

Expand Down Expand Up @@ -178,10 +178,10 @@ impl crate::Inner {

pub(crate) struct List {
/// The inner list.
pub(crate) inner: Mutex<ListenerSlab>,
inner: Mutex<ListenerSlab>,

/// The queue of pending operations.
pub(crate) queue: Queue,
queue: Queue,
}

impl List {
Expand Down Expand Up @@ -240,7 +240,7 @@ impl Drop for ListGuard<'_> {
let mut list = guard.take().unwrap();

// Tasks to wakeup after releasing the lock.
let mut tasks = vec![];
let mut tasks = alloc::vec![];

// Process every node left in the queue.
if let Some(start_node) = inner.list.queue.pop() {
Expand Down Expand Up @@ -623,6 +623,7 @@ impl ListenerSlab {
}
}

#[derive(Debug)]
pub(crate) enum Listener {
/// The listener has a node inside of the linked list.
HasNode(NonZeroUsize),
Expand All @@ -631,6 +632,16 @@ pub(crate) enum Listener {
Queued(Arc<TaskWaiting>),
}

impl PartialEq for Listener {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(Self::HasNode(a), Self::HasNode(b)) => a == b,
(Self::Queued(a), Self::Queued(b)) => Arc::ptr_eq(a, b),
_ => false,
}
}
}

/// A simple mutex type that optimistically assumes that the lock is uncontended.
pub(crate) struct Mutex<T> {
/// The inner value.
Expand Down Expand Up @@ -752,7 +763,7 @@ mod tests {
assert_eq!(listeners.notified, 0);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key1));
assert_eq!(listeners.start, Some(key1));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -787,7 +798,7 @@ mod tests {
assert_eq!(listeners.notified, 0);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key1));
assert_eq!(listeners.start, Some(key1));
assert_eq!(listeners.first_empty, NonZeroUsize::new(2).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -828,7 +839,7 @@ mod tests {
assert_eq!(listeners.notified, 1);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key2));
assert_eq!(listeners.start, Some(key2));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -863,7 +874,7 @@ mod tests {
assert_eq!(listeners.notified, 0);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key2));
assert_eq!(listeners.next, Some(key2));
assert_eq!(listeners.start, Some(key2));
assert_eq!(listeners.first_empty, NonZeroUsize::new(1).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -906,7 +917,7 @@ mod tests {
// Register one.
assert_eq!(
listeners.register(
Pin::new(&mut Some(Listener::Inserted(key2))),
Pin::new(&mut Some(Listener::HasNode(key2))),
TaskRef::Waker(&waker)
),
Some(false)
Expand All @@ -916,7 +927,7 @@ mod tests {
assert_eq!(listeners.notified, 0);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key1));
assert_eq!(listeners.start, Some(key1));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -951,7 +962,7 @@ mod tests {
assert_eq!(listeners.notified, 2);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key3));
assert_eq!(listeners.start, Some(key3));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -982,7 +993,7 @@ mod tests {
assert!(woken.load(Ordering::SeqCst));
assert_eq!(
listeners.register(
Pin::new(&mut Some(Listener::Inserted(key2))),
Pin::new(&mut Some(Listener::HasNode(key2))),
TaskRef::Waker(&waker)
),
Some(true)
Expand All @@ -1007,7 +1018,7 @@ mod tests {
// Register one.
assert_eq!(
listeners.register(
Pin::new(&mut Some(Listener::Inserted(key2))),
Pin::new(&mut Some(Listener::HasNode(key2))),
TaskRef::Waker(&waker)
),
Some(false)
Expand All @@ -1017,7 +1028,7 @@ mod tests {
assert_eq!(listeners.notified, 0);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key1));
assert_eq!(listeners.start, Some(key1));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -1052,7 +1063,7 @@ mod tests {
assert_eq!(listeners.notified, 1);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key2));
assert_eq!(listeners.start, Some(key2));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -1087,7 +1098,7 @@ mod tests {
assert_eq!(listeners.notified, 1);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key1));
assert_eq!(listeners.next, Some(key2));
assert_eq!(listeners.start, Some(key2));
assert_eq!(listeners.first_empty, NonZeroUsize::new(4).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -1122,7 +1133,7 @@ mod tests {
assert_eq!(listeners.notified, 0);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key2));
assert_eq!(listeners.next, Some(key2));
assert_eq!(listeners.start, Some(key2));
assert_eq!(listeners.first_empty, NonZeroUsize::new(1).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -1154,7 +1165,7 @@ mod tests {
assert_eq!(listeners.notified, 1);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key2));
assert_eq!(listeners.next, Some(key3));
assert_eq!(listeners.start, Some(key3));
assert_eq!(listeners.first_empty, NonZeroUsize::new(1).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -1186,7 +1197,7 @@ mod tests {
assert_eq!(listeners.notified, 1);
assert_eq!(listeners.tail, Some(key3));
assert_eq!(listeners.head, Some(key3));
assert_eq!(listeners.next, None);
assert_eq!(listeners.start, None);
assert_eq!(listeners.first_empty, NonZeroUsize::new(2).unwrap());
assert_eq!(listeners.listeners[0], Entry::Sentinel);
assert_eq!(
Expand Down Expand Up @@ -1222,11 +1233,11 @@ mod tests {

assert_eq!(
listener1,
Some(Listener::Inserted(NonZeroUsize::new(1).unwrap()))
Some(Listener::HasNode(NonZeroUsize::new(1).unwrap()))
);
assert_eq!(
listener2,
Some(Listener::Inserted(NonZeroUsize::new(2).unwrap()))
Some(Listener::HasNode(NonZeroUsize::new(2).unwrap()))
);

// Register a waker in the second listener.
Expand Down

0 comments on commit 17952d6

Please sign in to comment.