diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-06-21 09:32:46 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-06-21 14:34:27 +0200 |
| commit | 3815a686bb2b9071cbe65212bf6223bfb5969e74 (patch) | |
| tree | 52432f15dfdb495da208f943e6f68bd4981c16c4 | |
| parent | 99a5c4a924e869f31eff1598fe24c1e58bbae192 (diff) | |
| download | mullvadvpn-3815a686bb2b9071cbe65212bf6223bfb5969e74.tar.xz mullvadvpn-3815a686bb2b9071cbe65212bf6223bfb5969e74.zip | |
Prevent address cache update from causing a deadlock when entering connecting state
| -rw-r--r-- | mullvad-rpc/src/rest.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/mullvad-rpc/src/rest.rs b/mullvad-rpc/src/rest.rs index d21e20fbcd..57abf5bffd 100644 --- a/mullvad-rpc/src/rest.rs +++ b/mullvad-rpc/src/rest.rs @@ -133,6 +133,7 @@ impl RequestService { let (request_future, abort_handle) = abortable(self.client.request(hyper_request).map_err(Error::from)); let address_cache = self.address_cache.clone(); + let handle = self.handle.clone(); let future = async move { let response = @@ -145,19 +146,20 @@ impl RequestService { if let Err(err) = &response { match err { Error::HyperError(_) | Error::TimeoutError(_) => { + log::error!("HTTP request failed: {}", err); let current_address = address_cache.peek_address(); if current_address == host_addr && address_cache.has_tried_current_address() { - address_cache.select_new_address().await; - let new_address = address_cache.peek_address(); - - log::error!( - "HTTP request failed: {}, using address {}. Trying next API address: {}", - err, - current_address, - new_address, - ); + handle.spawn(async move { + address_cache.select_new_address().await; + let new_address = address_cache.peek_address(); + log::error!( + "Request failed using address {}. Trying next API address: {}", + current_address, + new_address, + ); + }); } } _ => (), |
