From a1fd74320b0072f0690382481314c1b1867ae86c Mon Sep 17 00:00:00 2001 From: numzero Date: Sat, 11 Jan 2025 00:28:21 +0300 Subject: [PATCH] Wake up --- src/mailbox.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/mailbox.rs b/src/mailbox.rs index c700cfa..bab644f 100644 --- a/src/mailbox.rs +++ b/src/mailbox.rs @@ -1,7 +1,7 @@ use std::{ future::Future, pin::Pin, - sync::Mutex, + sync::{Mutex, MutexGuard}, task::{Context, Poll, Waker}, }; @@ -21,6 +21,14 @@ struct MailboxInner { value: Option, } +fn wake(mut mb: MutexGuard>) { + let waker = mb.waker.take(); + drop(mb); + if let Some(waker) = waker { + waker.wake(); + } +} + struct MailboxPut<'a, T>(&'a Mailbox, Option); impl<'a, T> Unpin for MailboxPut<'a, T> {} impl<'a, T> Future for MailboxPut<'a, T> { @@ -33,11 +41,7 @@ impl<'a, T> Future for MailboxPut<'a, T> { return Poll::Pending; }; mb.value = self.1.take(); - let waker = mb.waker.take(); - drop(mb); - if let Some(waker) = waker { - waker.wake(); - } + wake(mb); Poll::Ready(()) } } @@ -52,11 +56,7 @@ impl<'a, T> Future for MailboxGet<'a, T> { mb.waker = Some(cx.waker().clone()); return Poll::Pending; }; - let waker = mb.waker.take(); - drop(mb); - if let Some(waker) = waker { - waker.wake(); - } + wake(mb); Poll::Ready(value) } }