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