diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-05-26 14:51:32 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-06-09 15:55:08 +0200 |
| commit | 998fa82ebaa7dc056c38607c437c0837c4c26b72 (patch) | |
| tree | c4206f139ccfabf4e4beeae1833a42957bf36037 | |
| parent | f8c4a9879afb26482108ae02f3e65682d7d7ab83 (diff) | |
| download | mullvadvpn-998fa82ebaa7dc056c38607c437c0837c4c26b72.tar.xz mullvadvpn-998fa82ebaa7dc056c38607c437c0837c4c26b72.zip | |
Fix D-Bus errors by using a separate connection for the route monitor
| -rw-r--r-- | talpid-core/src/dns/linux/systemd_resolved.rs | 2 | ||||
| -rw-r--r-- | talpid-dbus/src/systemd_resolved.rs | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/talpid-core/src/dns/linux/systemd_resolved.rs b/talpid-core/src/dns/linux/systemd_resolved.rs index 66141b5177..01b6d3ea22 100644 --- a/talpid-core/src/dns/linux/systemd_resolved.rs +++ b/talpid-core/src/dns/linux/systemd_resolved.rs @@ -121,7 +121,7 @@ impl SystemdResolved { ignore_config_changes.clone(), )); - let dbus_interface = self.dbus_interface.clone(); + let dbus_interface = DbusInterface::new_connection()?.async_handle(); let initial_states = self.initial_states.clone(); let current_config = self.current_config.clone(); let join_handle = tokio::spawn(async move { diff --git a/talpid-dbus/src/systemd_resolved.rs b/talpid-dbus/src/systemd_resolved.rs index 2a5b7b2b02..67836a2772 100644 --- a/talpid-dbus/src/systemd_resolved.rs +++ b/talpid-dbus/src/systemd_resolved.rs @@ -111,6 +111,17 @@ impl SystemdResolved { Ok(systemd_resolved) } + pub fn new_connection() -> Result<Self> { + let dbus_connection = SyncConnection::new_system().map_err(Error::ConnectDBus)?; + let systemd_resolved = SystemdResolved { + dbus_connection: Arc::new(dbus_connection), + }; + + systemd_resolved.ensure_resolved_exists()?; + Self::ensure_resolv_conf_is_resolved_symlink()?; + Ok(systemd_resolved) + } + pub fn ensure_resolved_exists(&self) -> Result<()> { let _: Box<dyn RefArg> = self .as_manager_object() |
