diff --git a/src/utils/channel.rs b/src/utils/channel.rs index d3a6709..07081df 100644 --- a/src/utils/channel.rs +++ b/src/utils/channel.rs @@ -30,7 +30,10 @@ impl Stream for LocalReceiver { if channel.closed { Poll::Ready(None) } else { - channel.waker = Some(cx.waker().clone()); + match &mut channel.waker { + Some(prev) => prev.clone_from(cx.waker()), + None => channel.waker = Some(cx.waker().clone()), + } Poll::Pending } } diff --git a/src/utils/wakers/array/readiness_array.rs b/src/utils/wakers/array/readiness_array.rs index c7e2157..dd50ae7 100644 --- a/src/utils/wakers/array/readiness_array.rs +++ b/src/utils/wakers/array/readiness_array.rs @@ -62,6 +62,9 @@ impl ReadinessArray { /// Set the parent `Waker`. This needs to be called at the start of every /// `poll` function. pub(crate) fn set_waker(&mut self, parent_waker: &Waker) { - self.parent_waker = Some(parent_waker.clone()); + match &mut self.parent_waker { + Some(prev) => prev.clone_from(parent_waker), + None => self.parent_waker = Some(parent_waker.clone()), + } } } diff --git a/src/utils/wakers/vec/readiness_vec.rs b/src/utils/wakers/vec/readiness_vec.rs index 76be854..65fdc24 100644 --- a/src/utils/wakers/vec/readiness_vec.rs +++ b/src/utils/wakers/vec/readiness_vec.rs @@ -74,7 +74,10 @@ impl ReadinessVec { /// Set the parent `Waker`. This needs to be called at the start of every /// `poll` function. pub(crate) fn set_waker(&mut self, parent_waker: &Waker) { - self.parent_waker = Some(parent_waker.clone()); + match &mut self.parent_waker { + Some(prev) => prev.clone_from(parent_waker), + None => self.parent_waker = Some(parent_waker.clone()), + } } /// Resize `readiness` to the new length.