From 86da42459cdf0f2a8277f1c393c675fa54521220 Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 29 Apr 2022 10:52:03 +0300 Subject: [PATCH] desktop: Use `Arc::new_cyclic` It became stable on Rust 1.60.0. --- desktop/src/executor.rs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/desktop/src/executor.rs b/desktop/src/executor.rs index 0b3a58bdc..c6abf13c3 100644 --- a/desktop/src/executor.rs +++ b/desktop/src/executor.rs @@ -147,17 +147,15 @@ impl GlutinAsyncExecutor { event_loop: EventLoopProxy, ) -> (Arc>, Sender>) { let (send, recv) = channel(); - let new_self = Arc::new(Mutex::new(Self { - task_queue: Arena::new(), - channel: recv, - self_ref: Weak::new(), - event_loop, - waiting_for_poll: false, - })); - let self_ref = Arc::downgrade(&new_self); - - new_self.lock().expect("locked self").self_ref = self_ref; - + let new_self = Arc::new_cyclic(|self_ref| { + Mutex::new(Self { + task_queue: Arena::new(), + channel: recv, + self_ref: self_ref.clone(), + event_loop, + waiting_for_poll: false, + }) + }); (new_self, send) }