diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-11-01 20:51:20 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-11-04 17:29:17 +0000 |
| commit | 14977a1b9c47efde12d0ab8a13b581af67932842 (patch) | |
| tree | 53ddc634e46afbae391ffe790d9c4d85dc77eb8c | |
| parent | b02ea5b346fabfb4d5e257cf9f3f3d3db9aaee5b (diff) | |
| download | mullvadvpn-14977a1b9c47efde12d0ab8a13b581af67932842.tar.xz mullvadvpn-14977a1b9c47efde12d0ab8a13b581af67932842.zip | |
Recreate tunnel on too many reconnects
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index da71d392f3..efc75f3cbb 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -28,6 +28,7 @@ use talpid_types::{ }; +const MAX_ATTEMPTS_WITH_SAME_TUN: u32 = 5; const MIN_TUNNEL_ALIVE_TIME: Duration = Duration::from_millis(1000); /// The tunnel has been started, but it is not established/functional. @@ -350,11 +351,26 @@ impl TunnelState for ConnectingState { ); BlockedState::enter(shared_values, BlockReason::StartTunnelError) } else { + let tun_provider: &mut dyn TunProvider = + shared_values.tun_provider.borrow_mut(); + + #[cfg(target_os = "android")] + { + if retry_attempt > 0 && retry_attempt % MAX_ATTEMPTS_WITH_SAME_TUN == 0 { + if let Err(error) = tun_provider.create_tun() { + error!( + "{}", + error.display_chain_with_msg("Failed to recreate tun device") + ); + } + } + } + match Self::start_tunnel( tunnel_parameters, &shared_values.log_dir, &shared_values.resource_dir, - shared_values.tun_provider.borrow_mut(), + tun_provider, retry_attempt, ) { Ok(connecting_state) => { |
