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:
@@ -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) {
|
||||||
@@ -421,6 +422,7 @@ class TunnelContainer: NSObject {
|
|||||||
if (s.status == .inactive) {
|
if (s.status == .inactive) {
|
||||||
s.stopObservingTunnelStatus()
|
s.stopObservingTunnelStatus()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user