diff options
| -rw-r--r-- | talpid-core/src/dns/mod.rs | 12 | ||||
| -rw-r--r-- | talpid-core/src/dns/windows.rs | 6 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connected_state.rs | 2 |
3 files changed, 19 insertions, 1 deletions
diff --git a/talpid-core/src/dns/mod.rs b/talpid-core/src/dns/mod.rs index ae902da09e..1a08ec265c 100644 --- a/talpid-core/src/dns/mod.rs +++ b/talpid-core/src/dns/mod.rs @@ -79,6 +79,14 @@ impl DnsMonitor { log::info!("Resetting DNS"); self.inner.reset() } + + /// Reset DNS settings to what they were before being set by this instance. + /// If the settings only affect a specific interface, this can be a no-op, + /// as the interface will be destroyed. + pub fn reset_before_interface_removal(&mut self) -> Result<(), Error> { + log::info!("Resetting DNS"); + self.inner.reset_before_interface_removal() + } } trait DnsMonitorT: Sized { @@ -93,4 +101,8 @@ trait DnsMonitorT: Sized { fn set(&mut self, interface: &str, servers: &[IpAddr]) -> Result<(), Self::Error>; fn reset(&mut self) -> Result<(), Self::Error>; + + fn reset_before_interface_removal(&mut self) -> Result<(), Self::Error> { + self.reset() + } } diff --git a/talpid-core/src/dns/windows.rs b/talpid-core/src/dns/windows.rs index adfe3e01e9..68742b9266 100644 --- a/talpid-core/src/dns/windows.rs +++ b/talpid-core/src/dns/windows.rs @@ -123,6 +123,12 @@ impl super::DnsMonitorT for DnsMonitor { } Ok(()) } + + fn reset_before_interface_removal(&mut self) -> Result<(), Self::Error> { + // do nothing since the tunnel interface goes away + let _ = self.current_index.take(); + Ok(()) + } } fn run_netsh_with_timeout(netsh_input: String, timeout: Duration) -> Result<(), Error> { diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs index 5fc02d1052..de9f43335e 100644 --- a/talpid-core/src/tunnel_state_machine/connected_state.rs +++ b/talpid-core/src/tunnel_state_machine/connected_state.rs @@ -141,7 +141,7 @@ impl ConnectedState { } fn reset_dns(shared_values: &mut SharedTunnelStateValues) { - if let Err(error) = shared_values.dns_monitor.reset() { + if let Err(error) = shared_values.dns_monitor.reset_before_interface_removal() { log::error!("{}", error.display_chain_with_msg("Unable to reset DNS")); } } |
