summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-05-26 14:51:32 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-06-09 15:55:08 +0200
commit998fa82ebaa7dc056c38607c437c0837c4c26b72 (patch)
treec4206f139ccfabf4e4beeae1833a42957bf36037
parentf8c4a9879afb26482108ae02f3e65682d7d7ab83 (diff)
downloadmullvadvpn-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.rs2
-rw-r--r--talpid-dbus/src/systemd_resolved.rs11
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()