Skip to content

Commit 86c3ef9

Browse files
committed
Move set waker = None to the waking thread (mpmc preparation)
1 parent 3061663 commit 86c3ef9

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/async.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@ impl<'a, T> Future for RecvFuture<'a, T> {
3333
.recv
3434
.shared
3535
.poll_inner()
36-
.map(|mut inner| self
36+
.map(|inner| self
3737
.recv
3838
.shared
39-
.try_recv(move || {
40-
// Detach the waker
41-
inner.recv_waker = None;
42-
inner
43-
}, &mut buf, self.recv.mpmc_mode.get()))
39+
.try_recv(
40+
move || inner,
41+
&mut buf,
42+
self.recv.mpmc_mode.get()
43+
)
44+
)
4445
};
4546

4647
let poll = match res {

src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ impl<T> Shared<T> {
286286
// Notify the receiving async task
287287
if let Some(recv_waker) = &inner.recv_waker {
288288
recv_waker.wake_by_ref();
289+
inner.recv_waker = None;
289290
}
290291
}
291292

@@ -332,8 +333,10 @@ impl<T> Shared<T> {
332333
self.send_signal.notify_all(self.inner.lock());
333334
#[cfg(feature = "async")]
334335
{
335-
if let Some(recv_waker) = &self.lock_inner().recv_waker {
336+
let mut inner = self.lock_inner();
337+
if let Some(recv_waker) = &inner.recv_waker {
336338
recv_waker.wake_by_ref();
339+
inner.recv_waker = None;
337340
}
338341
}
339342
}

0 commit comments

Comments
 (0)