Simplify the mailbox code

This commit is contained in:
numzero 2025-01-11 00:25:19 +03:00
parent 8007922721
commit 644b200086

View File

@ -28,21 +28,17 @@ impl<'a, T> Future for MailboxPut<'a, T> {
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut mb = self.0 .0.lock().unwrap(); let mut mb = self.0 .0.lock().unwrap();
match mb.value { let None = mb.value else {
None => { mb.waker = Some(cx.waker().clone());
let waker = mb.waker.take(); return Poll::Pending;
mb.value = self.1.take(); };
drop(mb); mb.value = self.1.take();
if let Some(waker) = waker { let waker = mb.waker.take();
waker.wake(); drop(mb);
} if let Some(waker) = waker {
Poll::Ready(()) waker.wake();
}
Some(_) => {
mb.waker = Some(cx.waker().clone());
Poll::Pending
}
} }
Poll::Ready(())
} }
} }
@ -52,20 +48,16 @@ impl<'a, T> Future for MailboxGet<'a, T> {
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut mb = self.0 .0.lock().unwrap(); let mut mb = self.0 .0.lock().unwrap();
match mb.value.take() { let Some(value) = mb.value.take() else {
None => { mb.waker = Some(cx.waker().clone());
mb.waker = Some(cx.waker().clone()); return Poll::Pending;
Poll::Pending };
} let waker = mb.waker.take();
Some(value) => { drop(mb);
let waker = mb.waker.take(); if let Some(waker) = waker {
drop(mb); waker.wake();
if let Some(waker) = waker {
waker.wake();
}
Poll::Ready(value)
}
} }
Poll::Ready(value)
} }
} }