Try pushing and popping before acquiring a listener

This commit is contained in:
asonix 2024-04-17 13:05:38 -05:00
parent b48d7df004
commit e4cc505951

View file

@ -76,6 +76,12 @@ impl<T> Queue<T> {
#[doc(hidden)] #[doc(hidden)]
pub async fn push(&self, mut item: T) { pub async fn push(&self, mut item: T) {
let Some(returned_item) = self.try_push(item) else {
return;
};
item = returned_item;
loop { loop {
let listener = self.inner.push_notify.listen().await; let listener = self.inner.push_notify.listen().await;
@ -114,6 +120,10 @@ impl<T> Queue<T> {
#[doc(hidden)] #[doc(hidden)]
pub async fn pop(&self) -> T { pub async fn pop(&self) -> T {
if let Some(item) = self.try_pop() {
return item;
}
loop { loop {
let listener = self.inner.pop_notify.listen().await; let listener = self.inner.pop_notify.listen().await;