diff options
| -rw-r--r-- | ios/MullvadVPN/Operations/AsyncOperation.swift | 28 |
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 |
