

















@@ -745,6 +745,66 @@ const defaultGatewayPostAttachRuntimeDeps: GatewayPostAttachRuntimeDeps = {
745745(await import("./server-tailscale.js")).startGatewayTailscaleExposure(...args),
746746};
747747748+function createDeferredGatewayUpdateCheck(params: {
749+startupTrace?: GatewayStartupTrace;
750+runtimeDeps: GatewayPostAttachRuntimeDeps;
751+cfg: OpenClawConfig;
752+log: {
753+info: (msg: string) => void;
754+warn: (msg: string) => void;
755+};
756+isNixMode: boolean;
757+broadcast: (event: string, payload: unknown, opts?: { dropIfSlow?: boolean }) => void;
758+}): { start: () => void; stop: () => void } {
759+let started = false;
760+let stopped = false;
761+let stopUpdateCheck: (() => void) | null = null;
762+763+const stop = () => {
764+stopped = true;
765+stopUpdateCheck?.();
766+stopUpdateCheck = null;
767+};
768+769+const start = () => {
770+if (started || stopped) {
771+return;
772+}
773+started = true;
774+setImmediate(() => {
775+if (stopped) {
776+return;
777+}
778+void measureStartup(params.startupTrace, "post-attach.update-check", () =>
779+params.runtimeDeps.scheduleGatewayUpdateCheck({
780+cfg: params.cfg,
781+log: params.log,
782+isNixMode: params.isNixMode,
783+onUpdateAvailableChange: (updateAvailable) => {
784+const payload: GatewayUpdateAvailableEventPayload = { updateAvailable };
785+params.broadcast(GATEWAY_EVENT_UPDATE_AVAILABLE, payload, { dropIfSlow: true });
786+},
787+}),
788+)
789+.then((nextStop) => {
790+if (stopped) {
791+nextStop();
792+return;
793+}
794+stopUpdateCheck = nextStop;
795+})
796+.catch((err) => {
797+if (stopped) {
798+return;
799+}
800+params.log.warn(`gateway update check failed to start: ${String(err)}`);
801+});
802+});
803+};
804+805+return { start, stop };
806+}
807+748808export async function startGatewayPostAttachRuntime(
749809params: {
750810minimalTestGateway: boolean;
@@ -833,19 +893,16 @@ export async function startGatewayPostAttachRuntime(
833893}),
834894);
835895836-const stopGatewayUpdateCheckPromise = params.minimalTestGateway
837- ? Promise.resolve(() => {})
838- : measureStartup(params.startupTrace, "post-attach.update-check", () =>
839-runtimeDeps.scheduleGatewayUpdateCheck({
840-cfg: params.cfgAtStart,
841-log: params.log,
842-isNixMode: params.isNixMode,
843-onUpdateAvailableChange: (updateAvailable) => {
844-const payload: GatewayUpdateAvailableEventPayload = { updateAvailable };
845-params.broadcast(GATEWAY_EVENT_UPDATE_AVAILABLE, payload, { dropIfSlow: true });
846-},
847-}),
848-);
896+const updateCheck = params.minimalTestGateway
897+ ? { start: () => {}, stop: () => {} }
898+ : createDeferredGatewayUpdateCheck({
899+startupTrace: params.startupTrace,
900+ runtimeDeps,
901+cfg: params.cfgAtStart,
902+log: params.log,
903+isNixMode: params.isNixMode,
904+broadcast: params.broadcast,
905+});
849906850907const tailscaleCleanupPromise = params.minimalTestGateway
851908 ? Promise.resolve(null)
@@ -961,26 +1018,27 @@ export async function startGatewayPostAttachRuntime(
9611018});
96210199631020if (params.deferSidecars !== true) {
964-const [, stopGatewayUpdateCheck, tailscaleCleanup, sidecarsResult] = await Promise.all([
1021+const [, tailscaleCleanup, sidecarsResult] = await Promise.all([
9651022startupLogPromise,
966-stopGatewayUpdateCheckPromise,
9671023tailscaleCleanupPromise,
9681024sidecarsPromise,
9691025]);
1026+updateCheck.start();
9701027return {
971- stopGatewayUpdateCheck,
1028+stopGatewayUpdateCheck: updateCheck.stop,
9721029 tailscaleCleanup,
9731030pluginServices: sidecarsResult.pluginServices,
9741031};
9751032}
9761033977-const [, stopGatewayUpdateCheck, tailscaleCleanup] = await Promise.all([
978-startupLogPromise,
979-stopGatewayUpdateCheckPromise,
980-tailscaleCleanupPromise,
981-]);
1034+const [, tailscaleCleanup] = await Promise.all([startupLogPromise, tailscaleCleanupPromise]);
1035+updateCheck.start();
9821036983-return { stopGatewayUpdateCheck, tailscaleCleanup, pluginServices: reportedPluginServices };
1037+return {
1038+stopGatewayUpdateCheck: updateCheck.stop,
1039+ tailscaleCleanup,
1040+pluginServices: reportedPluginServices,
1041+};
9841042}
98510439861044export const __testing = {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。