From 81cc9a0b347255629d411323e7ff8fee4d5ec61d Mon Sep 17 00:00:00 2001 From: pablu Date: Wed, 3 Jun 2026 11:00:56 +0200 Subject: Implement drop for joining thread handle --- src/app.rs | 8 +++++++- src/background_loader.rs | 12 +++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/app.rs b/src/app.rs index 6819bf0..d6dd71e 100644 --- a/src/app.rs +++ b/src/app.rs @@ -95,6 +95,12 @@ impl App { // Fallback, primarly while implementing _ => match key.code { + KeyCode::Char('r') => { + if !matches!(self.loading_state, LoadingState::Loading) { + self.start_available_packages_load(); + } + None + } KeyCode::Char('q') => Some(Signal::Quit), KeyCode::Tab => Some(Signal::CycleTab), _ => None, @@ -123,12 +129,12 @@ impl App { self.portage.available = packages; self.loading_state = LoadingState::Complete; - // TODO: Join loader thread with main thread again self.available_loader = None; } crate::background_loader::LoaderMessage::Error(e) => { self.loading_error = Some(e); self.loading_state = LoadingState::Error; + self.available_loader = None; } } diff --git a/src/background_loader.rs b/src/background_loader.rs index ea9d331..111c943 100644 --- a/src/background_loader.rs +++ b/src/background_loader.rs @@ -14,7 +14,7 @@ pub enum LoaderMessage { #[derive(Debug)] pub struct PackageLoader { receiver: Receiver, - thread_handle: thread::JoinHandle<()>, + thread_handle: Option>, } impl PackageLoader { @@ -35,13 +35,19 @@ impl PackageLoader { PackageLoader { receiver: rx, - thread_handle, + thread_handle: Some(thread_handle), } } pub fn try_recv(&self) -> Option { self.receiver.try_recv().ok() } +} - //TODO: join thread back to main thread after packages were loaded +impl Drop for PackageLoader { + fn drop(&mut self) { + if let Some(handle) = self.thread_handle.take() { + _ = handle.join(); + } + } } -- cgit 1.3.1