diff options
Diffstat (limited to 'ios')
| -rw-r--r-- | ios/MullvadVPN/Promise/Promise.swift | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/ios/MullvadVPN/Promise/Promise.swift b/ios/MullvadVPN/Promise/Promise.swift index d1466e6dc6..df78aced85 100644 --- a/ios/MullvadVPN/Promise/Promise.swift +++ b/ios/MullvadVPN/Promise/Promise.swift @@ -208,13 +208,22 @@ final class Promise<Value> { } final class PromiseCancellationToken { - private let handler: () -> Void + private var handler: (() -> Void)? + private let lock = NSLock() + fileprivate init(_ handler: @escaping () -> Void) { self.handler = handler } + func cancel() { + lock.withCriticalBlock { + self.handler?() + self.handler = nil + } + } + deinit { - handler() + cancel() } } |
