From 3e90e3788a041b540b71dc1a5375247e4ca594cb Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 22 Jun 2026 14:32:02 +0800 Subject: [PATCH] fix SDLSuperService --- Tun/Super/SDLSuperService.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Tun/Super/SDLSuperService.swift b/Tun/Super/SDLSuperService.swift index 19d7dd3..f2b5127 100644 --- a/Tun/Super/SDLSuperService.swift +++ b/Tun/Super/SDLSuperService.swift @@ -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