From: Andrej Mihajlov Date: Fri, 3 Mar 2023 15:12:02 +0000 (+0100) Subject: Switch NSCondition to DispatchGroup X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fam%2Fdefault-path;p=thirdparty%2Fwireguard-apple.git Switch NSCondition to DispatchGroup Signed-off-by: Andrej Mihajlov --- 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") } }