From f158dbfbca255c24b6684918448dde9cb5b75e6f Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Wed, 25 Feb 2026 23:03:44 +0000 Subject: [PATCH] Sync with template: Fix duplicate server handlers on concurrent restarts - Move _disposables cleanup outside lsClient guard in restartServer() so disposables are always released, even when no previous client existed. - Wrap lsClient.stop() in deactivate() with try/catch to prevent unhandled rejections during extension deactivation. Source: microsoft/vscode-python-tools-extension-template#259 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/common/server.ts | 4 ++-- src/extension.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/server.ts b/src/common/server.ts index afe5dc9..f75502d 100644 --- a/src/common/server.ts +++ b/src/common/server.ts @@ -87,9 +87,9 @@ export async function restartServer( } catch (ex) { traceError(`Server: Stop failed: ${ex}`); } - _disposables.forEach((d) => d.dispose()); - _disposables = []; } + _disposables.forEach((d) => d.dispose()); + _disposables = []; updateStatus(undefined, LanguageStatusSeverity.Information, true); const newLSClient = await createServer(workspaceSetting, serverId, serverName, outputChannel, { diff --git a/src/extension.ts b/src/extension.ts index 5f2ca38..0f1e346 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -113,6 +113,10 @@ export async function activate(context: vscode.ExtensionContext): Promise export async function deactivate(): Promise { if (lsClient) { - await lsClient.stop(); + try { + await lsClient.stop(); + } catch (ex) { + traceError(`Server: Stop failed: ${ex}`); + } } }