fix(crypto): Fix a deadlock when generating the backup request

This commit is contained in:
Damir Jelić
2021-10-16 14:32:26 +02:00
parent 63915171fc
commit df53eb00ab

View File

@@ -132,13 +132,19 @@ impl BackupMachine {
/// TODO
pub async fn backup(&self) -> Result<Option<OutgoingRequest>, 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()))
}
}