]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Switch NSCondition to DispatchGroup am/default-path
authorAndrej Mihajlov <and@mullvad.net>
Fri, 3 Mar 2023 15:12:02 +0000 (16:12 +0100)
committerAndrej Mihajlov <and@mullvad.net>
Mon, 6 Mar 2023 11:51:05 +0000 (12:51 +0100)
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
Sources/WireGuardKit/WireGuardAdapter.swift

index 2fc157e88bba131d00c725a244501146fea76e83..3c0e50320aed809d6b2704eca7431dc180e9dd94 100644 (file)
@@ -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")
         }
     }