diff options
| -rw-r--r-- | ios/MullvadVPN/TunnelIPC/TunnelIPCRequestOperation.swift | 38 |
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) - } } } |
