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