From 81324e459d0b6ab4fc8c0028acf475f415d86931 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 3 Jul 2024 20:17:34 -0400 Subject: [PATCH] fix: borrow_mut error in future.rs (#14) --- Cargo.toml | 2 +- src/future.rs | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index de486fe..5731570 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deno_unsync" -version = "0.3.5" +version = "0.3.6" edition = "2021" authors = ["the Deno authors"] license = "MIT" diff --git a/src/future.rs b/src/future.rs index d2cb4a9..676fd3e 100644 --- a/src/future.rs +++ b/src/future.rs @@ -126,12 +126,10 @@ where let mut inner = self.0.data.borrow_mut(); match &mut inner.future_or_output { FutureOrOutput::Future(fut) => { - self - .0 - .child_waker_state - .wakers - .borrow_mut() - .push(cx.waker().clone()); + { + let mut wakers = self.0.child_waker_state.wakers.borrow_mut(); + wakers.push(cx.waker().clone()); + } if self.0.child_waker_state.can_poll.lower() { let child_waker = create_child_waker(self.0.child_waker_state.clone()); @@ -141,9 +139,10 @@ where Poll::Ready(result) => { inner.future_or_output = FutureOrOutput::Output(result.clone()); drop(inner); // stop borrow_mut - let wakers = std::mem::take( - &mut *self.0.child_waker_state.wakers.borrow_mut(), - ); + let wakers = { + let mut wakers = self.0.child_waker_state.wakers.borrow_mut(); + std::mem::take(&mut *wakers) + }; for waker in wakers { waker.wake(); } @@ -207,7 +206,10 @@ unsafe fn wake_waker(data: *const ()) { unsafe fn wake_by_ref_waker(data: *const ()) { let state = Rc::from_raw(data as *const ChildWakerState); state.can_poll.raise(); - let wakers = state.wakers.borrow().clone(); + let wakers = { + let wakers = state.wakers.borrow(); + wakers.clone() + }; for waker in wakers { waker.wake_by_ref(); }