From 8613e9187842149fd4abc22bbb8b9577e54474db Mon Sep 17 00:00:00 2001 From: m4air Date: Tue, 15 Sep 2026 16:20:31 -0700 Subject: [PATCH] fix(renderer): cancel deferred diff model disposal --- .../editor/use-diff-section-model-lifecycle.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/components/editor/use-diff-section-model-lifecycle.ts b/src/renderer/src/components/editor/use-diff-section-model-lifecycle.ts index 5d8c901c367..61bee09f89c 100644 --- a/src/renderer/src/components/editor/use-diff-section-model-lifecycle.ts +++ b/src/renderer/src/components/editor/use-diff-section-model-lifecycle.ts @@ -12,13 +12,18 @@ export function useDiffSectionModelLifecycle(params: { setSectionRootNode: (node: HTMLDivElement | null) => void } { const disposeDiffModels = useCallback(() => { - window.setTimeout(() => { + if (disposeTimerRef.current !== null) { + window.clearTimeout(disposeTimerRef.current) + } + disposeTimerRef.current = window.setTimeout(() => { + disposeTimerRef.current = null disposeUnattachedMonacoModelPaths(monaco, [ `${params.modelPathBase}:original`, `${params.modelPathBase}:modified` ]) }, 0) }, [params.modelPathBase]) + const disposeTimerRef = useRef(null) const disposeDiffModelsRef = useRef(disposeDiffModels) // Keep callback-ref dispose path on the latest disposer without render-time mutation. useEffect(() => { @@ -38,5 +43,14 @@ export function useDiffSectionModelLifecycle(params: { } }, [disposeDiffModels, params.collapsed]) + useEffect(() => { + return () => { + if (disposeTimerRef.current !== null) { + window.clearTimeout(disposeTimerRef.current) + disposeTimerRef.current = null + } + } + }, []) + return { disposeDiffModels, setSectionRootNode } }