summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-05-02 14:18:34 +0200
committerDavid Lönnhager <david.l@mullvad.net>2024-05-06 08:42:17 +0200
commit42c240ed3082a4a83fece474a48d6711b43ae821 (patch)
tree0d618c260861395970cf83102f5f35a06c0d3a1d
parent339e8cc4a500c73a02e29fd0124152c7ac6bc4f0 (diff)
downloadmullvadvpn-42c240ed3082a4a83fece474a48d6711b43ae821.tar.xz
mullvadvpn-42c240ed3082a4a83fece474a48d6711b43ae821.zip
Continue if spawning offline monitor fails
-rw-r--r--CHANGELOG.md3
-rw-r--r--talpid-core/src/offline/mod.rs49
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs7
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);