Simplify the mailbox code
This commit is contained in:
parent
8007922721
commit
644b200086
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user