From 5ad31fb685d6bba532f5787366e5db533878af0e Mon Sep 17 00:00:00 2001 From: DonovanYe <72693206+Donovan-Ye@users.noreply.github.com> Date: Mon, 4 Nov 2024 12:36:07 +0800 Subject: [PATCH] fix: fix infinite loop when race condition happens (#24) --- src/index.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/index.ts b/src/index.ts index 461e2ae..eddd288 100644 --- a/src/index.ts +++ b/src/index.ts @@ -26,8 +26,7 @@ function showSettingsUpdateDialog(ext: ExtensionContext) { } export function activate(ext: ExtensionContext) { - let triggerDoc: TextDocument | undefined - let triggerPos: Position | undefined + let lock: boolean = false showSettingsUpdateDialog(ext) @@ -40,12 +39,10 @@ export function activate(ext: ExtensionContext) { ], { async provideDefinition(document: TextDocument, position: Position) { // prevent infinite loop and reduce unnecessary calls - if ((triggerDoc === document && triggerPos?.isEqual(position))) + if (lock) return null - triggerDoc = document - triggerPos = position - + lock = true const definitions = await commands.executeCommand('vscode.executeDefinitionProvider', document.uri, position) as Definition | DefinitionLink[] if (!Array.isArray(definitions)) return definitions @@ -86,6 +83,7 @@ export function activate(ext: ExtensionContext) { } } + lock = false return modifiedDefinitions as Location[] | LocationLink[] }, })