summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-02-04 11:14:35 +0100
committerAndrej Mihajlov <and@mullvad.net>2022-02-07 14:37:41 +0100
commit6607f089cd9a55c4a0d5bafa5cb910d541d46486 (patch)
tree2570bdb5a365e81ab445a6bd4b43d0c3677a53fb
parent0888f63fac9282c311d94bc5fd47f76139c14c81 (diff)
downloadmullvadvpn-6607f089cd9a55c4a0d5bafa5cb910d541d46486.tar.xz
mullvadvpn-6607f089cd9a55c4a0d5bafa5cb910d541d46486.zip
AsyncOperation: add operationDidFinish hook
-rw-r--r--ios/MullvadVPN/Operations/AsyncOperation.swift28
1 files changed, 19 insertions, 9 deletions
diff --git a/ios/MullvadVPN/Operations/AsyncOperation.swift b/ios/MullvadVPN/Operations/AsyncOperation.swift
index e8572ca56e..9936108e58 100644
--- a/ios/MullvadVPN/Operations/AsyncOperation.swift
+++ b/ios/MullvadVPN/Operations/AsyncOperation.swift
@@ -58,19 +58,29 @@ class AsyncOperation: Operation {
}
final func finish() {
- stateLock.withCriticalBlock {
- if _isExecuting {
- setExecuting(false)
- }
+ stateLock.lock()
- if !_isFinished {
- willChangeValue(for: \.isFinished)
- _isFinished = true
- didChangeValue(for: \.isFinished)
- }
+ if _isExecuting {
+ setExecuting(false)
+ }
+
+ if !_isFinished {
+ willChangeValue(for: \.isFinished)
+ _isFinished = true
+ didChangeValue(for: \.isFinished)
+
+ stateLock.unlock()
+
+ operationDidFinish()
+ } else {
+ stateLock.unlock()
}
}
+ func operationDidFinish() {
+ // Override in subclasses
+ }
+
private func setExecuting(_ value: Bool) {
willChangeValue(for: \.isExecuting)
_isExecuting = value