diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-02-04 11:14:35 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-02-07 14:37:41 +0100 |
| commit | 6607f089cd9a55c4a0d5bafa5cb910d541d46486 (patch) | |
| tree | 2570bdb5a365e81ab445a6bd4b43d0c3677a53fb | |
| parent | 0888f63fac9282c311d94bc5fd47f76139c14c81 (diff) | |
| download | mullvadvpn-6607f089cd9a55c4a0d5bafa5cb910d541d46486.tar.xz mullvadvpn-6607f089cd9a55c4a0d5bafa5cb910d541d46486.zip | |
AsyncOperation: add operationDidFinish hook
| -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 |
