From df53eb00abba43fbd2cb5eb57fc9c7eb8e021114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Sat, 16 Oct 2021 14:32:26 +0200 Subject: [PATCH] fix(crypto): Fix a deadlock when generating the backup request --- crates/matrix-sdk-crypto/src/backups/mod.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/matrix-sdk-crypto/src/backups/mod.rs b/crates/matrix-sdk-crypto/src/backups/mod.rs index e46dcb73a..51a84e305 100644 --- a/crates/matrix-sdk-crypto/src/backups/mod.rs +++ b/crates/matrix-sdk-crypto/src/backups/mod.rs @@ -132,13 +132,19 @@ impl BackupMachine { /// TODO pub async fn backup(&self) -> Result, CryptoStoreError> { - if let Some(request) = &*self.pending_backup.read().await { + let mut request = self.pending_backup.write().await; + + if let Some(request) = &*request { + debug!("Backing up, returning an existing request"); + Ok(Some(request.clone().into())) } else { - let request = self.backup_helper().await?; - *self.pending_backup.write().await = request.clone(); + debug!("Backing up, creating a new request"); - Ok(request.map(|r| r.into())) + let new_request = self.backup_helper().await?; + *request = new_request.clone(); + + Ok(new_request.map(|r| r.into())) } }