mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Make ClientProxy.pauseServices async and drop its completion block
`pauseServices` took a completion block only because it was historically called from `deinit`, which can't await (the SE-0371 note). `deinit` now stops the sync itself, so the sole remaining caller is the AppCoordinator, which can await instead. Make `pauseServices` async and update the AppCoordinator background-task and lifecycle call sites to await it, calling the OS-facing completions (endBackgroundTask / setTaskCompleted) afterwards. This also removes the `MainActor.assumeIsolated` workaround — awaiting a @MainActor method hops onto the main actor cleanly — and fixes a latent bug where a nil `self` in the background app refresh expiration handler would skip setTaskCompleted.
This commit is contained in:
@@ -431,18 +431,14 @@ class ClientProxy: ClientProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func pauseServices(completion: (() -> Void)?) {
|
||||
func pauseServices() async {
|
||||
MXLog.info("Pausing services")
|
||||
|
||||
if restartTask != nil {
|
||||
restartTask = nil
|
||||
}
|
||||
|
||||
let task = transitionServices(to: .suspended)
|
||||
Task {
|
||||
await task.value
|
||||
completion?()
|
||||
}
|
||||
await transitionServices(to: .suspended).value
|
||||
}
|
||||
|
||||
func expireSyncSessions() async {
|
||||
|
||||
Reference in New Issue
Block a user