Skip to content

Commit 00eee14

Browse files
committed
Don't send available shells request to both ext hosts
Part of microsoft#76049
1 parent 327d49e commit 00eee14

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

src/vs/workbench/api/browser/mainThreadTerminalService.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
7-
import { ITerminalService, ITerminalInstance, IShellLaunchConfig, ITerminalProcessExtHostProxy, ITerminalProcessExtHostRequest, ITerminalDimensions, EXT_HOST_CREATION_DELAY } from 'vs/workbench/contrib/terminal/common/terminal';
7+
import { ITerminalService, ITerminalInstance, IShellLaunchConfig, ITerminalProcessExtHostProxy, ITerminalProcessExtHostRequest, ITerminalDimensions, EXT_HOST_CREATION_DELAY, IAvailableShellsRequest } from 'vs/workbench/contrib/terminal/common/terminal';
88
import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, IExtHostContext, ShellLaunchConfigDto } from 'vs/workbench/api/common/extHost.protocol';
99
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
1010
import { UriComponents, URI } from 'vs/base/common/uri';
@@ -47,7 +47,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
4747
this._toDispose.push(_terminalService.onActiveInstanceChanged(instance => this._onActiveTerminalChanged(instance ? instance.id : null)));
4848
this._toDispose.push(_terminalService.onInstanceTitleChanged(instance => this._onTitleChanged(instance.id, instance.title)));
4949
this._toDispose.push(_terminalService.configHelper.onWorkspacePermissionsChanged(isAllowed => this._onWorkspacePermissionsChanged(isAllowed)));
50-
this._toDispose.push(_terminalService.onRequestAvailableShells(r => this._proxy.$requestAvailableShells().then(e => r(e))));
50+
this._toDispose.push(_terminalService.onRequestAvailableShells(e => this._onRequestAvailableShells(e)));
5151

5252
// ITerminalInstanceService listeners
5353
if (terminalInstanceService.onRequestDefaultShellAndArgs) {
@@ -290,4 +290,11 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
290290
}
291291
this._terminalProcesses[terminalId].emitLatency(sum / COUNT);
292292
}
293+
294+
private _onRequestAvailableShells(request: IAvailableShellsRequest): void {
295+
if (request.remoteAuthority !== this._remoteAuthority) {
296+
return;
297+
}
298+
this._proxy.$requestAvailableShells().then(e => request.callback(e));
299+
}
293300
}

src/vs/workbench/contrib/terminal/common/terminal.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export interface ITerminalService {
226226
onInstancesChanged: Event<void>;
227227
onInstanceTitleChanged: Event<ITerminalInstance>;
228228
onActiveInstanceChanged: Event<ITerminalInstance | undefined>;
229-
onRequestAvailableShells: Event<(shells: IShellDefinition[]) => void>;
229+
onRequestAvailableShells: Event<IAvailableShellsRequest>;
230230

231231
/**
232232
* Creates a terminal.
@@ -757,6 +757,11 @@ export interface ITerminalProcessExtHostRequest {
757757
isWorkspaceShellAllowed: boolean;
758758
}
759759

760+
export interface IAvailableShellsRequest {
761+
remoteAuthority: string | null;
762+
callback: (shells: IShellDefinition[]) => void;
763+
}
764+
760765
export enum LinuxDistro {
761766
Fedora,
762767
Ubuntu,

src/vs/workbench/contrib/terminal/common/terminalService.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Event, Emitter } from 'vs/base/common/event';
88
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
99
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
1010
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
11-
import { ITerminalService, ITerminalInstance, IShellLaunchConfig, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE, TERMINAL_PANEL_ID, ITerminalTab, ITerminalProcessExtHostProxy, ITerminalProcessExtHostRequest, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, ITerminalNativeService, IShellDefinition } from 'vs/workbench/contrib/terminal/common/terminal';
11+
import { ITerminalService, ITerminalInstance, IShellLaunchConfig, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE, TERMINAL_PANEL_ID, ITerminalTab, ITerminalProcessExtHostProxy, ITerminalProcessExtHostRequest, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, ITerminalNativeService, IShellDefinition, IAvailableShellsRequest } from 'vs/workbench/contrib/terminal/common/terminal';
1212
import { IStorageService } from 'vs/platform/storage/common/storage';
1313
import { URI } from 'vs/base/common/uri';
1414
import { FindReplaceState } from 'vs/editor/contrib/find/findState';
@@ -67,8 +67,8 @@ export abstract class TerminalService implements ITerminalService {
6767
public get onActiveInstanceChanged(): Event<ITerminalInstance | undefined> { return this._onActiveInstanceChanged.event; }
6868
protected readonly _onTabDisposed = new Emitter<ITerminalTab>();
6969
public get onTabDisposed(): Event<ITerminalTab> { return this._onTabDisposed.event; }
70-
protected readonly _onRequestAvailableShells = new Emitter<(shells: IShellDefinition[]) => void>();
71-
public get onRequestAvailableShells(): Event<(shells: IShellDefinition[]) => void> { return this._onRequestAvailableShells.event; }
70+
protected readonly _onRequestAvailableShells = new Emitter<IAvailableShellsRequest>();
71+
public get onRequestAvailableShells(): Event<IAvailableShellsRequest> { return this._onRequestAvailableShells.event; }
7272

7373
public abstract get configHelper(): ITerminalConfigHelper;
7474

@@ -563,6 +563,10 @@ export abstract class TerminalService implements ITerminalService {
563563
}
564564

565565
private _detectWindowsShells(): Promise<IShellDefinition[]> {
566-
return new Promise(r => this._onRequestAvailableShells.fire(r));
566+
const conn = this._remoteAgentService.getConnection();
567+
return new Promise(r => this._onRequestAvailableShells.fire({
568+
remoteAuthority: conn ? conn.remoteAuthority : null,
569+
callback: r
570+
}));
567571
}
568572
}

0 commit comments

Comments
 (0)