diff options
Diffstat (limited to 'Sources/WireGuardKit/WireGuardAdapter.swift')
-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") } } |