From bd35742a8fb277bac5ce5852533dd90c000826aa Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 14 Nov 2024 11:20:11 -0500 Subject: [PATCH] refactor: attempt to quit display background service when sender is closed --- cosmic-settings/src/pages/display/mod.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/cosmic-settings/src/pages/display/mod.rs b/cosmic-settings/src/pages/display/mod.rs index b7f9272..0d16992 100644 --- a/cosmic-settings/src/pages/display/mod.rs +++ b/cosmic-settings/src/pages/display/mod.rs @@ -236,6 +236,8 @@ impl page::Page for Page { &mut self, sender: tokio::sync::mpsc::Sender, ) -> Task { + use std::time::Duration; + if let Some(task) = self.background_service.take() { task.abort(); } @@ -253,11 +255,21 @@ impl page::Page for Page { }; while context.dispatch(&mut event_queue).await.is_ok() { - while let Ok(message) = rx.try_recv() { + if sender.is_closed() { + break; + } + 'outer: while let Ok(message) = rx.try_recv() { if let cosmic_randr::Message::ManagerDone = message { - let _ = sender - .send(pages::Message::Displays(Message::Refresh)) - .await; + if matches!( + tokio::time::timeout( + Duration::from_secs(1), + sender.send(pages::Message::Displays(Message::Refresh)) + ) + .await, + Err(_) | Ok(Err(_)) + ) { + break 'outer; + } } } }