fix SDLSuperService
This commit is contained in:
parent
10a3e02f46
commit
3e90e3788a
@ -11,6 +11,7 @@ actor SDLSuperService {
|
||||
private var generation: UInt64 = 0
|
||||
private var isRunning = false
|
||||
private var isStopping = false
|
||||
private var needsImmediateRestart = false
|
||||
private let retryDelay: Duration
|
||||
|
||||
init(serverEndpoint: SDLConfiguration.ResolvedServerEndpoint, port: UInt16 = 1443, retryDelay: Duration = .seconds(5)) {
|
||||
@ -60,9 +61,19 @@ actor SDLSuperService {
|
||||
} catch {
|
||||
self.clearCurrent(session, generation: generation)
|
||||
await session.stop()
|
||||
|
||||
guard !self.isStopping else {
|
||||
break
|
||||
}
|
||||
|
||||
SDLLogger.log("[SDLSuperService] session failed: \(error.localizedDescription), will restart", category: .super)
|
||||
}
|
||||
|
||||
if self.consumeImmediateRestartRequest() {
|
||||
SDLLogger.log("[SDLSuperService] session invalidated after wakeup, will restart immediately", category: .super)
|
||||
continue
|
||||
}
|
||||
|
||||
try await Task.sleep(for: self.retryDelay)
|
||||
}
|
||||
}
|
||||
@ -77,6 +88,7 @@ actor SDLSuperService {
|
||||
return
|
||||
}
|
||||
|
||||
self.needsImmediateRestart = true
|
||||
await self.invalidateCurrentSession()
|
||||
}
|
||||
|
||||
@ -98,6 +110,12 @@ actor SDLSuperService {
|
||||
await session?.stop()
|
||||
}
|
||||
|
||||
private func consumeImmediateRestartRequest() -> Bool {
|
||||
let needsImmediateRestart = self.needsImmediateRestart
|
||||
self.needsImmediateRestart = false
|
||||
return needsImmediateRestart
|
||||
}
|
||||
|
||||
private func clearCurrent(_ session: SDLSuperSession, generation: UInt64) {
|
||||
guard self.generation == generation else {
|
||||
return
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user