macos: harden control channel connect continuation

This commit is contained in:
Peter Steinberger
2025-12-08 22:16:05 +01:00
parent 33b54f3d0c
commit 9bde7a6daa

View File

@@ -170,17 +170,27 @@ final class ControlChannel: ObservableObject {
self.connection = conn
try await withCheckedThrowingContinuation { (cont: CheckedContinuation<Void, Error>) in
var resumed = false
let resume: (Result<Void, Error>) -> Void = { result in
guard !resumed else { return }
resumed = true
switch result {
case .success: cont.resume(returning: ())
case let .failure(err): cont.resume(throwing: err)
}
}
conn.stateUpdateHandler = { state in
switch state {
case .ready:
cont.resume(returning: ())
Task { @MainActor in self.state = .connected }
resume(.success(()))
case let .failed(err):
Task { @MainActor in self.state = .degraded(err.localizedDescription) }
cont.resume(throwing: err)
resume(.failure(err))
case let .waiting(err):
Task { @MainActor in self.state = .degraded(err.localizedDescription) }
cont.resume(throwing: err)
resume(.failure(err))
default:
break
}