}
func refreshStatus() {
- #if os(macOS)
- // In macOS, we wait for a few seconds after deactivation to work around a system bug.
- // If a tunnel gets activated in this time interval, it's stopped by the system automatically in ~25 seconds.
- if self.status == .deactivating && tunnelProvider.connection.status == .disconnected {
- self.deactivationTimer?.invalidate()
- let deactivationTimer = Timer(timeInterval: 6 /* seconds */, repeats: false) { [weak self] _ in
- guard let self = self else { return }
- self.status = TunnelStatus(from: self.tunnelProvider.connection.status)
- self.isActivateOnDemandEnabled = self.tunnelProvider.isOnDemandEnabled
- }
- self.deactivationTimer = deactivationTimer
- RunLoop.main.add(deactivationTimer, forMode: .common)
- return
- }
- #endif
status = TunnelStatus(from: tunnelProvider.connection.status)
isActivateOnDemandEnabled = tunnelProvider.isOnDemandEnabled
}
wgTurnOff(handle)
}
completionHandler()
+
+ #if os(macOS)
+ // HACK: This is a filthy hack to work around Apple bug 32073323 (dup'd by us as 47526107).
+ // Remove it when they finally fix this upstream and the fix has been rolled out to
+ // sufficient quantities of users.
+ exit(0)
+ #endif
}
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) {