Switch NSCondition to DispatchGroup

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
This commit is contained in:
Andrej Mihajlov
2023-03-03 16:12:02 +01:00
parent 3149c50299
commit 2909fdf41e
+11 -8
View File
@@ -314,26 +314,29 @@ public class WireGuardAdapter {
/// - Returns: `PacketTunnelSettingsGenerator`. /// - Returns: `PacketTunnelSettingsGenerator`.
private func setNetworkSettings(_ networkSettings: NEPacketTunnelNetworkSettings) throws { private func setNetworkSettings(_ networkSettings: NEPacketTunnelNetworkSettings) throws {
var systemError: Error? var systemError: Error?
let condition = NSCondition()
// Activate the condition let dispatchGroup = DispatchGroup()
condition.lock()
defer { condition.unlock() } dispatchGroup.enter()
self.packetTunnelProvider?.setTunnelNetworkSettings(networkSettings) { error in self.packetTunnelProvider?.setTunnelNetworkSettings(networkSettings) { error in
systemError = error systemError = error
condition.signal() dispatchGroup.leave()
} }
// Packet tunnel's `setTunnelNetworkSettings` times out in certain // Packet tunnel's `setTunnelNetworkSettings` times out in certain
// scenarios & never calls the given callback. // scenarios & never calls the given callback.
let setTunnelNetworkSettingsTimeout: TimeInterval = 5 // seconds let setTunnelNetworkSettingsTimeout: Int = 5 // seconds
if condition.wait(until: Date().addingTimeInterval(setTunnelNetworkSettingsTimeout)) { let waitResult = dispatchGroup.wait(wallTimeout: .now() + .seconds(setTunnelNetworkSettingsTimeout))
switch waitResult {
case .success:
if let systemError = systemError { if let systemError = systemError {
throw WireGuardAdapterError.setNetworkSettings(systemError) throw WireGuardAdapterError.setNetworkSettings(systemError)
} }
} else {
case .timedOut:
self.logHandler(.error, "setTunnelNetworkSettings timed out after 5 seconds; proceeding anyway") self.logHandler(.error, "setTunnelNetworkSettings timed out after 5 seconds; proceeding anyway")
} }
} }