diff options
author | 2023-03-03 16:12:02 +0100 | |
---|---|---|
committer | 2023-03-06 12:51:05 +0100 | |
commit | 2909fdf41eba3b7afa3fb0eb54eb2049d2f386b5 (patch) | |
tree | c39ec6ccebe3c475ad4d7a3acc894e9c39be74a7 | |
parent | Kit: replace path monitor with KVO observer on defaultPath (diff) | |
download | wireguard-apple-am/default-path.tar.xz wireguard-apple-am/default-path.zip |
Switch NSCondition to DispatchGroupam/default-path
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
-rw-r--r-- | Sources/WireGuardKit/WireGuardAdapter.swift | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/Sources/WireGuardKit/WireGuardAdapter.swift b/Sources/WireGuardKit/WireGuardAdapter.swift index 2fc157e..3c0e503 100644 --- a/Sources/WireGuardKit/WireGuardAdapter.swift +++ b/Sources/WireGuardKit/WireGuardAdapter.swift @@ -314,26 +314,29 @@ public class WireGuardAdapter { /// - Returns: `PacketTunnelSettingsGenerator`. private func setNetworkSettings(_ networkSettings: NEPacketTunnelNetworkSettings) throws { var systemError: Error? - let condition = NSCondition() - // Activate the condition - condition.lock() - defer { condition.unlock() } + let dispatchGroup = DispatchGroup() + + dispatchGroup.enter() self.packetTunnelProvider?.setTunnelNetworkSettings(networkSettings) { error in systemError = error - condition.signal() + dispatchGroup.leave() } // Packet tunnel's `setTunnelNetworkSettings` times out in certain // scenarios & never calls the given callback. - let setTunnelNetworkSettingsTimeout: TimeInterval = 5 // seconds + let setTunnelNetworkSettingsTimeout: Int = 5 // seconds + + let waitResult = dispatchGroup.wait(wallTimeout: .now() + .seconds(setTunnelNetworkSettingsTimeout)) - if condition.wait(until: Date().addingTimeInterval(setTunnelNetworkSettingsTimeout)) { + switch waitResult { + case .success: if let systemError = systemError { throw WireGuardAdapterError.setNetworkSettings(systemError) } - } else { + + case .timedOut: self.logHandler(.error, "setTunnelNetworkSettings timed out after 5 seconds; proceeding anyway") } } |