@@ -48,16 +48,16 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
48
48
options _: [ String : NSObject ] ? , completionHandler: @escaping ( Error ? ) -> Void
49
49
) {
50
50
logger. info ( " startTunnel called " )
51
+ guard manager == nil else {
52
+ logger. error ( " startTunnel called with non-nil Manager " )
53
+ completionHandler ( nil )
54
+ return
55
+ }
51
56
start ( completionHandler)
52
57
}
53
58
54
59
// called by `startTunnel` and on `wake`
55
60
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
- }
61
61
guard let proto = protocolConfiguration as? NETunnelProviderProtocol ,
62
62
let baseAccessURL = proto. serverAddress
63
63
else {
@@ -123,9 +123,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
123
123
logger. error ( " error stopping manager: \( error. description, privacy: . public) " )
124
124
}
125
125
globalXPCListenerDelegate. vpnXPCInterface. manager = nil
126
+ self . manager = nil
126
127
completionHandler ( )
127
128
}
128
- self . manager = nil
129
129
}
130
130
131
131
override func handleAppMessage( _ messageData: Data , completionHandler: ( ( Data ? ) -> Void ) ? ) {
@@ -142,6 +142,11 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
142
142
}
143
143
144
144
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
+ }
145
150
logger. debug ( " wake called " )
146
151
reasserting = true
147
152
currentSettings = . init( tunnelRemoteAddress: " 127.0.0.1 " )
0 commit comments