summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-06-21 09:32:46 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-06-21 14:34:27 +0200
commit3815a686bb2b9071cbe65212bf6223bfb5969e74 (patch)
tree52432f15dfdb495da208f943e6f68bd4981c16c4
parent99a5c4a924e869f31eff1598fe24c1e58bbae192 (diff)
downloadmullvadvpn-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.rs20
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,
+ );
+ });
}
}
_ => (),