Skip to content

Commit db11801

Browse files
committed
fix: improve wake & sleep handling
1 parent 3442516 commit db11801

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

Coder Desktop/VPN/PacketTunnelProvider.swift

+11-6
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
4848
options _: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void
4949
) {
5050
logger.info("startTunnel called")
51+
guard manager == nil else {
52+
logger.error("startTunnel called with non-nil Manager")
53+
completionHandler(nil)
54+
return
55+
}
5156
start(completionHandler)
5257
}
5358

5459
// called by `startTunnel` and on `wake`
5560
func start(_ completionHandler: @escaping (Error?) -> Void) {
56-
guard manager == nil else {
57-
logger.error("startTunnel called with non-nil Manager")
58-
completionHandler(makeNSError(suffix: "PTP", desc: "Already running"))
59-
return
60-
}
6161
guard let proto = protocolConfiguration as? NETunnelProviderProtocol,
6262
let baseAccessURL = proto.serverAddress
6363
else {
@@ -123,9 +123,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
123123
logger.error("error stopping manager: \(error.description, privacy: .public)")
124124
}
125125
globalXPCListenerDelegate.vpnXPCInterface.manager = nil
126+
self.manager = nil
126127
completionHandler()
127128
}
128-
self.manager = nil
129129
}
130130

131131
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
@@ -142,6 +142,11 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
142142
}
143143

144144
override func wake() {
145+
guard !reasserting else { return }
146+
guard manager == nil else {
147+
logger.error("wake called with non-nil Manager")
148+
return
149+
}
145150
logger.debug("wake called")
146151
reasserting = true
147152
currentSettings = .init(tunnelRemoteAddress: "127.0.0.1")

0 commit comments

Comments
 (0)