TunnelsManager: initialize observer on correct thread

Because of the callback recursion, this function needs to always be called from the right thread

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld
2018-11-03 07:03:23 +01:00
parent 6405b76941
commit ec943587fa
+7 -5
View File
@@ -399,13 +399,14 @@ class TunnelContainer: NSObject {
} }
private func startObservingTunnelStatus() { private func startObservingTunnelStatus() {
if (statusObservationToken != nil) { return } DispatchQueue.main.async { [weak self] in
let connection = tunnelProvider.connection guard let s = self else { return }
statusObservationToken = NotificationCenter.default.addObserver( if (s.statusObservationToken != nil) { return }
let connection = s.tunnelProvider.connection
s.statusObservationToken = NotificationCenter.default.addObserver(
forName: .NEVPNStatusDidChange, forName: .NEVPNStatusDidChange,
object: connection, object: connection,
queue: nil) { [weak self] (_) in queue: nil) { (_) in
guard let s = self else { return }
if ((s.status == .restarting) && (connection.status == .disconnected || connection.status == .disconnecting)) { if ((s.status == .restarting) && (connection.status == .disconnected || connection.status == .disconnecting)) {
// Don't change s.status when disconnecting for a restart // Don't change s.status when disconnecting for a restart
if (connection.status == .disconnected) { if (connection.status == .disconnected) {
@@ -423,6 +424,7 @@ class TunnelContainer: NSObject {
} }
} }
} }
}
private func stopObservingTunnelStatus() { private func stopObservingTunnelStatus() {
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in