]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
TunnelsManager: Invoke reload() in a subsequent runloop
authorRoopesh Chander <roop@roopc.net>
Sat, 26 Jan 2019 09:01:38 +0000 (14:31 +0530)
committerRoopesh Chander <roop@roopc.net>
Sat, 26 Jan 2019 09:01:42 +0000 (14:31 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/Tunnel/TunnelsManager.swift

index 29d486a78a6a01a1c6489c6eb9e400ff0299bac6..3120f7d76cb00acba37b490d2bd4d2fda10d0f59 100644 (file)
@@ -340,7 +340,13 @@ class TunnelsManager {
 
     func startObservingTunnelConfigurations() {
         configurationsObservationToken = NotificationCenter.default.addObserver(forName: .NEVPNConfigurationChange, object: nil, queue: OperationQueue.main) { [weak self] _ in
-            self?.reload()
+            DispatchQueue.main.async { [weak self] in
+                // We schedule reload() in a subsequent runloop to ensure that the completion handler of loadAllFromPreferences
+                // (reload() calls loadAllFromPreferences) is called after the completion handler of the saveToPreferences or
+                // removeFromPreferences call, if any, that caused this notification to fire. This notification can also fire
+                // as a result of a tunnel getting added or removed outside of the app.
+                self?.reload()
+            }
         }
     }