PacketTunnelProvider: proper fix for 32073323
This commit is contained in:
parent
af026c106e
commit
2d761b4a00
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue