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> {
let mut mb = self.0 .0.lock().unwrap();
match mb.value {
None => {
let waker = mb.waker.take();
mb.value = self.1.take();
drop(mb);
if let Some(waker) = waker {
waker.wake();
}
Poll::Ready(())
}
Some(_) => {
mb.waker = Some(cx.waker().clone());
Poll::Pending
}
let None = mb.value else {
mb.waker = Some(cx.waker().clone());
return Poll::Pending;
};
mb.value = self.1.take();
let waker = mb.waker.take();
drop(mb);
if let Some(waker) = waker {
waker.wake();
}
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> {
let mut mb = self.0 .0.lock().unwrap();
match mb.value.take() {
None => {
mb.waker = Some(cx.waker().clone());
Poll::Pending
}
Some(value) => {
let waker = mb.waker.take();
drop(mb);
if let Some(waker) = waker {
waker.wake();
}
Poll::Ready(value)
}
let Some(value) = mb.value.take() else {
mb.waker = Some(cx.waker().clone());
return Poll::Pending;
};
let waker = mb.waker.take();
drop(mb);
if let Some(waker) = waker {
waker.wake();
}
Poll::Ready(value)
}
}