From 9d591dffc5e71f9d988a5d3642d9ef544a96644c Mon Sep 17 00:00:00 2001 From: James Magahern Date: Mon, 16 Jun 2025 19:06:35 -0700 Subject: [PATCH] Try to resolve daemon hang when changing settings --- kordophoned/src/daemon/mod.rs | 14 ++++++++------ kordophoned/src/daemon/update_monitor.rs | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/kordophoned/src/daemon/mod.rs b/kordophoned/src/daemon/mod.rs index 9876c0b..b79fbbb 100644 --- a/kordophoned/src/daemon/mod.rs +++ b/kordophoned/src/daemon/mod.rs @@ -251,13 +251,15 @@ impl Daemon { } Event::UpdateSettings(settings, reply) => { - let previous_server_url = self.get_settings().await.unwrap_or_default().server_url; + let previous_settings = self.get_settings().await.unwrap_or_default(); + let previous_server_url = previous_settings.server_url; self.update_settings(&settings).await.unwrap_or_else(|e| { log::error!(target: target::SETTINGS, "Failed to update settings: {}", e); }); - if previous_server_url != settings.server_url { + // Only trigger re-sync if both URLs are Some and different, or if one is Some and other is None + if previous_server_url.as_deref() != settings.server_url.as_deref() { // If the server url has changed, we'll need to do a full re-sync. self.delete_all_conversations().await.unwrap_or_else(|e| { log::error!(target: target::SYNC, "Failed to delete all conversations: {}", e); @@ -267,12 +269,12 @@ impl Daemon { self.spawn_conversation_list_sync(); // Also restart the update monitor. - self.update_monitor_command_tx + if let Err(e) = self.update_monitor_command_tx .as_ref() .unwrap() - .send(UpdateMonitorCommand::Restart) - .await - .unwrap(); + .try_send(UpdateMonitorCommand::Restart) { + log::warn!(target: target::UPDATES, "Failed to send restart command to update monitor: {}", e); + } } reply.send(()).unwrap(); diff --git a/kordophoned/src/daemon/update_monitor.rs b/kordophoned/src/daemon/update_monitor.rs index d5bdf71..12ae643 100644 --- a/kordophoned/src/daemon/update_monitor.rs +++ b/kordophoned/src/daemon/update_monitor.rs @@ -34,7 +34,7 @@ pub struct UpdateMonitor { impl UpdateMonitor { pub fn new(database: Arc>, event_sender: Sender) -> Self { - let (command_tx, command_rx) = tokio::sync::mpsc::channel(1); + let (command_tx, command_rx) = tokio::sync::mpsc::channel(100); Self { database, event_sender,