diff options
| author | pablu <me@pablu.de> | 2026-06-03 11:00:56 +0200 |
|---|---|---|
| committer | pablu <me@pablu.de> | 2026-06-03 11:00:56 +0200 |
| commit | 81cc9a0b347255629d411323e7ff8fee4d5ec61d (patch) | |
| tree | a5704e90a30620fa86dd125aa5f8ed3ffae5ec78 /src | |
| parent | c5a634bd5408ea5174035abf8713953e7fc48e08 (diff) | |
Implement drop for joining thread handle
Diffstat (limited to 'src')
| -rw-r--r-- | src/app.rs | 8 | ||||
| -rw-r--r-- | src/background_loader.rs | 12 |
2 files changed, 16 insertions, 4 deletions
@@ -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<LoaderMessage>, - thread_handle: thread::JoinHandle<()>, + thread_handle: Option<thread::JoinHandle<()>>, } impl PackageLoader { @@ -35,13 +35,19 @@ impl PackageLoader { PackageLoader { receiver: rx, - thread_handle, + thread_handle: Some(thread_handle), } } pub fn try_recv(&self) -> Option<LoaderMessage> { 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(); + } + } } |
