From: Roopesh Chander Date: Sat, 26 Jan 2019 09:01:38 +0000 (+0530) Subject: TunnelsManager: Invoke reload() in a subsequent runloop X-Git-Tag: 0.0.20190207-1~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a796c6c485d7243d836c7067e9db76a705ec9847;p=thirdparty%2Fwireguard-apple.git TunnelsManager: Invoke reload() in a subsequent runloop Signed-off-by: Roopesh Chander --- diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index 29d486a..3120f7d 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -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() + } } }