diff options
| author | David Lönnhager <david.l@mullvad.net> | 2022-04-28 10:35:16 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2022-04-29 09:42:40 +0200 |
| commit | 6d42d0d9399a50cd4cefb5370a68147958e3b131 (patch) | |
| tree | 0d7abe61345b7e6d218829a4a54bbf1a9b3af0d5 | |
| parent | 9ef673ea6d26c32734a670147ad52a28408fa14a (diff) | |
| download | mullvadvpn-6d42d0d9399a50cd4cefb5370a68147958e3b131.tar.xz mullvadvpn-6d42d0d9399a50cd4cefb5370a68147958e3b131.zip | |
Logout event was not sent despite state change
| -rw-r--r-- | mullvad-daemon/src/device/mod.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/mullvad-daemon/src/device/mod.rs b/mullvad-daemon/src/device/mod.rs index 1321fb3e69..f0bae347d1 100644 --- a/mullvad-daemon/src/device/mod.rs +++ b/mullvad-daemon/src/device/mod.rs @@ -549,19 +549,21 @@ impl AccountManager { async fn logout(&mut self, tx: ResponseTx<()>) { Self::drain_requests(&mut self.data_requests, || Err(Error::AccountChange)); - let data = match self.data.take() { - Some(it) => it, - _ => return, - }; + if self.data.is_none() { + return; + } if let Err(err) = self.cacher.write(None).await { let _ = tx.send(Err(err)); return; } + // Cannot panic: `data.is_none() == false`. + let old_data = self.data.take().unwrap(); + self.listeners .retain(|listener| listener.send(InnerDeviceEvent::Logout).is_ok()); - let logout_call = tokio::spawn(Box::pin(self.logout_api_call(data))); + let logout_call = tokio::spawn(Box::pin(self.logout_api_call(old_data))); tokio::spawn(async move { let _response = tokio::time::timeout(LOGOUT_TIMEOUT, logout_call).await; |
