From b813d5dd3004643986916c3a67c3ef4410ddeb19 Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Fri, 15 Jan 2021 22:12:23 +0100 Subject: [PATCH] Leave the local extension host running when connection is lost to the remote extension host --- extensions/vscode-test-resolver/src/extension.ts | 3 +++ .../services/extensions/common/abstractExtensionService.ts | 4 +++- .../services/extensions/common/remoteExtensionHost.ts | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extensions/vscode-test-resolver/src/extension.ts b/extensions/vscode-test-resolver/src/extension.ts index 11d2cd3d147..91b4d41bc66 100644 --- a/extensions/vscode-test-resolver/src/extension.ts +++ b/extensions/vscode-test-resolver/src/extension.ts @@ -229,6 +229,9 @@ export function activate(context: vscode.ExtensionContext) { } vscode.workspace.registerRemoteAuthorityResolver('test', { async resolve(_authority: string): Promise { + setTimeout(async () => { + await vscode.window.showErrorMessage('Just a custom message.', { modal: true, useCustom: true }, 'OK', 'Great'); + }, 2000); throw vscode.RemoteAuthorityResolverError.NotAvailable('Intentional Error', true); } }); diff --git a/src/vs/workbench/services/extensions/common/abstractExtensionService.ts b/src/vs/workbench/services/extensions/common/abstractExtensionService.ts index 612584c3a4e..c3aab1b7d03 100644 --- a/src/vs/workbench/services/extensions/common/abstractExtensionService.ts +++ b/src/vs/workbench/services/extensions/common/abstractExtensionService.ts @@ -464,7 +464,9 @@ export abstract class AbstractExtensionService extends Disposable implements IEx protected _onExtensionHostCrashed(extensionHost: ExtensionHostManager, code: number, signal: string | null): void { console.error('Extension host terminated unexpectedly. Code: ', code, ' Signal: ', signal); - this._stopExtensionHosts(); + if (extensionHost.kind === ExtensionHostKind.LocalProcess) { + this._stopExtensionHosts(); + } } //#region IExtensionService diff --git a/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts b/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts index 40967da4cad..7e8a66b2be4 100644 --- a/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts +++ b/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts @@ -57,6 +57,7 @@ export class RemoteExtensionHost extends Disposable implements IExtensionHost { public readonly onExit: Event<[number, string | null]> = this._onExit.event; private _protocol: PersistentProtocol | null; + private _hasLostConnection: boolean; private _terminating: boolean; private readonly _isExtensionDevHost: boolean; @@ -77,6 +78,7 @@ export class RemoteExtensionHost extends Disposable implements IExtensionHost { super(); this.remoteAuthority = this._initDataProvider.remoteAuthority; this._protocol = null; + this._hasLostConnection = false; this._terminating = false; this._register(this._lifecycleService.onShutdown(reason => this.dispose())); @@ -188,6 +190,11 @@ export class RemoteExtensionHost extends Disposable implements IExtensionHost { } private _onExtHostConnectionLost(): void { + if (this._hasLostConnection) { + // avoid re-entering this method + return; + } + this._hasLostConnection = true; if (this._isExtensionDevHost && this._environmentService.debugExtensionHost.debugId) { this._extensionHostDebugService.close(this._environmentService.debugExtensionHost.debugId); -- GitLab