summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-05-27 11:05:23 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-07-02 09:54:19 +0200
commita0895524074cead9929a55f00b7429b9cf7e8009 (patch)
treef4ed95450f87fc92024bcbc3043e2fab0231fe4c
parentd1f203db76a0a06ddd89c54a0c9f990b0a35f208 (diff)
downloadmullvadvpn-a0895524074cead9929a55f00b7429b9cf7e8009.tar.xz
mullvadvpn-a0895524074cead9929a55f00b7429b9cf7e8009.zip
Always disengage the driver before deinitializing WinFw
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs
index 2f8f6cea0c..5fabfb0daf 100644
--- a/talpid-core/src/tunnel_state_machine/mod.rs
+++ b/talpid-core/src/tunnel_state_machine/mod.rs
@@ -264,6 +264,8 @@ impl TunnelStateMachine {
.map_err(Error::InitSplitTunneling)?;
let mut shared_values = SharedTunnelStateValues {
+ #[cfg(windows)]
+ split_tunnel,
runtime,
firewall,
dns_monitor,
@@ -280,8 +282,6 @@ impl TunnelStateMachine {
resource_dir,
#[cfg(target_os = "linux")]
connectivity_check_was_enabled: None,
- #[cfg(windows)]
- split_tunnel,
};
let (initial_state, _) = DisconnectedState::enter(&mut shared_values, reset_firewall);
@@ -336,6 +336,11 @@ pub trait TunnelParametersGenerator: Send + 'static {
/// Values that are common to all tunnel states.
struct SharedTunnelStateValues {
+ /// Management of excluded apps.
+ /// This object should be dropped before deinitializing WinFw (dropping the `Firewall`
+ /// instance), since the driver may add filters to the same sublayer.
+ #[cfg(windows)]
+ split_tunnel: split_tunnel::SplitTunnel,
runtime: tokio::runtime::Handle,
firewall: Firewall,
dns_monitor: DnsMonitor,
@@ -363,9 +368,6 @@ struct SharedTunnelStateValues {
/// NetworkManager's connecitivity check state.
#[cfg(target_os = "linux")]
connectivity_check_was_enabled: Option<bool>,
- /// Management of excluded apps.
- #[cfg(windows)]
- split_tunnel: split_tunnel::SplitTunnel,
}
impl SharedTunnelStateValues {