From 4aa59f6dd32aaaf8bb6e8298c12c15041c48e4f5 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Thu, 29 Sep 2022 14:40:45 +0200 Subject: [PATCH] Fix race condition in MessengerStartBackup --- .../Functions/MessengerStartBackup.swift | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift index 254bc6b9..1512d361 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift @@ -1,3 +1,4 @@ +import Foundation import XCTestDynamicOverlay import XXClient @@ -33,24 +34,26 @@ extension MessengerStartBackup { let paramsData = try params.encode() let paramsString = String(data: paramsData, encoding: .utf8)! var didAddParams = false - func addParams() { - guard let backup = env.backup() else { return } - backup.addJSON(paramsString) - didAddParams = true - } + var semaphore: DispatchSemaphore? = .init(value: 0) let backup = try env.initializeBackup( e2eId: e2e.getId(), udId: ud.getId(), password: password, callback: .init { data in + semaphore?.wait() if !didAddParams { - addParams() + if let backup = env.backup() { + backup.addJSON(paramsString) + didAddParams = true + } } else { env.backupCallbacks.registered().handle(data) } } ) env.backup.set(backup) + semaphore?.signal() + semaphore = nil } } } -- GitLab