diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-05-02 14:18:34 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-05-06 08:42:17 +0200 |
| commit | 42c240ed3082a4a83fece474a48d6711b43ae821 (patch) | |
| tree | 0d618c260861395970cf83102f5f35a06c0d3a1d | |
| parent | 339e8cc4a500c73a02e29fd0124152c7ac6bc4f0 (diff) | |
| download | mullvadvpn-42c240ed3082a4a83fece474a48d6711b43ae821.tar.xz mullvadvpn-42c240ed3082a4a83fece474a48d6711b43ae821.zip | |
Continue if spawning offline monitor fails
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | talpid-core/src/offline/mod.rs | 49 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 7 |
3 files changed, 25 insertions, 34 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 74a1ac8125..595c366b97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,9 @@ Line wrap the file at 100 chars. Th #### macOS - Add support for split tunneling (beta). +### Changed +- Don't fail to start daemon when the offline monitor fails to be initialized. + ### Fixed #### Linux - Fix GUI not working on Ubuntu 24.04 by adding an AppArmor profile. diff --git a/talpid-core/src/offline/mod.rs b/talpid-core/src/offline/mod.rs index 1a9a17e788..ede1943311 100644 --- a/talpid-core/src/offline/mod.rs +++ b/talpid-core/src/offline/mod.rs @@ -5,6 +5,7 @@ use talpid_routing::RouteManagerHandle; #[cfg(target_os = "android")] use talpid_types::android::AndroidContext; use talpid_types::net::Connectivity; +use talpid_types::ErrorExt; #[cfg(target_os = "macos")] #[path = "macos.rs"] @@ -29,8 +30,6 @@ static FORCE_DISABLE_OFFLINE_MONITOR: Lazy<bool> = Lazy::new(|| { .unwrap_or(false) }); -pub use self::imp::Error; - pub struct MonitorHandle(Option<imp::MonitorHandle>); impl MonitorHandle { @@ -42,39 +41,33 @@ impl MonitorHandle { } } -#[cfg(not(target_os = "android"))] pub async fn spawn_monitor( sender: UnboundedSender<Connectivity>, - route_manager: RouteManagerHandle, + #[cfg(not(target_os = "android"))] route_manager: RouteManagerHandle, #[cfg(target_os = "linux")] fwmark: Option<u32>, -) -> Result<MonitorHandle, Error> { + #[cfg(target_os = "android")] android_context: AndroidContext, +) -> MonitorHandle { let monitor = if *FORCE_DISABLE_OFFLINE_MONITOR { None } else { - Some( - imp::spawn_monitor( - sender, - route_manager, - #[cfg(target_os = "linux")] - fwmark, - ) - .await?, + imp::spawn_monitor( + sender, + #[cfg(not(target_os = "android"))] + route_manager, + #[cfg(target_os = "linux")] + fwmark, + #[cfg(target_os = "android")] + android_context, ) + .await + .inspect_err(|error| { + log::warn!( + "{}", + error.display_chain_with_msg("Failed to spawn offline monitor") + ); + }) + .ok() }; - Ok(MonitorHandle(monitor)) -} - -#[cfg(target_os = "android")] -pub async fn spawn_monitor( - sender: UnboundedSender<Connectivity>, - android_context: AndroidContext, -) -> Result<MonitorHandle, Error> { - let monitor = if *FORCE_DISABLE_OFFLINE_MONITOR { - None - } else { - Some(imp::spawn_monitor(sender, android_context).await?) - }; - - Ok(MonitorHandle(monitor)) + MonitorHandle(monitor) } diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index ad3e9459aa..e31dec3624 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -55,10 +55,6 @@ const TUNNEL_STATE_MACHINE_SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(5); /// Errors that can happen when setting up or using the state machine. #[derive(thiserror::Error, Debug)] pub enum Error { - /// Unable to spawn offline state monitor - #[error("Unable to spawn offline state monitor")] - OfflineMonitorError(#[from] crate::offline::Error), - /// Unable to set up split tunneling #[cfg(any(target_os = "windows", target_os = "macos"))] #[error("Failed to initialize split tunneling")] @@ -339,8 +335,7 @@ impl TunnelStateMachine { #[cfg(target_os = "android")] android_context, ) - .await - .map_err(Error::OfflineMonitorError)?; + .await; let connectivity = offline_monitor.connectivity().await; let _ = initial_offline_state_tx.unbounded_send(connectivity); |
