PacketTunnelProvider: proper fix for 32073323

This commit is contained in:
Jason A. Donenfeld 2019-02-07 15:01:37 +01:00
parent af026c106e
commit 2d761b4a00
2 changed files with 7 additions and 15 deletions

View File

@ -442,21 +442,6 @@ class TunnelContainer: NSObject {
} }
func refreshStatus() { 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) status = TunnelStatus(from: tunnelProvider.connection.status)
isActivateOnDemandEnabled = tunnelProvider.isOnDemandEnabled isActivateOnDemandEnabled = tunnelProvider.isOnDemandEnabled
} }

View File

@ -95,6 +95,13 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
wgTurnOff(handle) wgTurnOff(handle)
} }
completionHandler() 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) { override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) {