summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-04-28 10:35:16 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-04-29 09:42:40 +0200
commit6d42d0d9399a50cd4cefb5370a68147958e3b131 (patch)
tree0d7abe61345b7e6d218829a4a54bbf1a9b3af0d5
parent9ef673ea6d26c32734a670147ad52a28408fa14a (diff)
downloadmullvadvpn-6d42d0d9399a50cd4cefb5370a68147958e3b131.tar.xz
mullvadvpn-6d42d0d9399a50cd4cefb5370a68147958e3b131.zip
Logout event was not sent despite state change
-rw-r--r--mullvad-daemon/src/device/mod.rs12
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;