summaryrefslogtreecommitdiffhomepage
path: root/ios
diff options
context:
space:
mode:
Diffstat (limited to 'ios')
-rw-r--r--ios/MullvadVPN/TunnelIPC/TunnelIPCRequestOperation.swift38
1 files changed, 19 insertions, 19 deletions
diff --git a/ios/MullvadVPN/TunnelIPC/TunnelIPCRequestOperation.swift b/ios/MullvadVPN/TunnelIPC/TunnelIPCRequestOperation.swift
index cb48e414d7..9a81bf3045 100644
--- a/ios/MullvadVPN/TunnelIPC/TunnelIPCRequestOperation.swift
+++ b/ios/MullvadVPN/TunnelIPC/TunnelIPCRequestOperation.swift
@@ -58,7 +58,7 @@ extension TunnelIPC {
override func main() {
queue.async {
guard !self.isCancelled else {
- self.completeOperation(completion: .cancelled)
+ self.finish(completion: .cancelled)
return
}
@@ -77,11 +77,23 @@ extension TunnelIPC {
queue.async {
if self.isExecuting {
- self.completeOperation(completion: .cancelled)
+ self.finish(completion: .cancelled)
}
}
}
+ override func finish(completion: Completion) {
+ // Release status observer.
+ removeVPNStatusObserver()
+
+ // Cancel pending work.
+ timeoutWork?.cancel()
+ waitForConnectingStateWork?.cancel()
+
+ // Finish operation.
+ super.finish(completion: completion)
+ }
+
private func removeVPNStatusObserver() {
statusObserver?.invalidate()
statusObserver = nil
@@ -89,7 +101,7 @@ extension TunnelIPC {
private func setTimeoutTimer(connectingStateWaitDelay: TimeInterval) {
let workItem = DispatchWorkItem { [weak self] in
- self?.completeOperation(completion: .failure(.send(.timeout)))
+ self?.finish(completion: .failure(.send(.timeout)))
}
// Cancel pending timeout work.
@@ -122,7 +134,7 @@ extension TunnelIPC {
sendRequest()
case .invalid, .disconnecting, .disconnected:
- completeOperation(completion: .failure(.send(.tunnelDown(status))))
+ finish(completion: .failure(.send(.tunnelDown(status))))
@unknown default:
break
@@ -178,7 +190,7 @@ extension TunnelIPC {
do {
messageData = try TunnelIPC.Coding.encodeRequest(request)
} catch {
- completeOperation(completion: .failure(.encoding(error)))
+ finish(completion: .failure(.encoding(error)))
return
}
@@ -190,25 +202,13 @@ extension TunnelIPC {
self.queue.async {
let decodingResult = self.decoderHandler(responseData)
- self.completeOperation(completion: OperationCompletion(result: decodingResult))
+ self.finish(completion: OperationCompletion(result: decodingResult))
}
}
} catch {
- completeOperation(completion: .failure(.send(.system(error))))
+ finish(completion: .failure(.send(.system(error))))
}
}
-
- private func completeOperation(completion: OperationCompletion<Output, TunnelIPC.Error>) {
- // Release status observer.
- removeVPNStatusObserver()
-
- // Cancel pending work.
- timeoutWork?.cancel()
- waitForConnectingStateWork?.cancel()
-
- // Finish operation.
- finish(completion: completion)
- }
}
}