From e6254db320e7fc2678c668518b2a29cafce55ed5 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Thu, 13 Dec 2018 10:01:02 -0800 Subject: [PATCH] Recreate pid promise when reusing terminals --- .../mainThreadTerminalService.ts | 5 ---- src/vs/workbench/api/node/extHost.protocol.ts | 1 - .../api/node/extHostTerminalService.ts | 29 +++++++++---------- .../parts/terminal/common/terminal.ts | 3 -- .../parts/terminal/common/terminalService.ts | 3 -- .../electron-browser/terminalInstance.ts | 4 --- 6 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts b/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts index 89e4f87775b..09490c49394 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts @@ -36,7 +36,6 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape this._toDispose.push(terminalService.onInstanceRequestExtHostProcess(request => this._onTerminalRequestExtHostProcess(request))); this._toDispose.push(terminalService.onActiveInstanceChanged(instance => this._onActiveTerminalChanged(instance ? instance.id : undefined))); this._toDispose.push(terminalService.onInstanceTitleChanged(instance => this._onTitleChanged(instance.id, instance.title))); - this._toDispose.push(terminalService.onInstanceProcessLaunching(instance => this._onProcessLaunching(instance.id))); // Set initial ext host state this.terminalService.terminalInstances.forEach(t => { @@ -173,10 +172,6 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape this._proxy.$acceptTerminalTitleChange(terminalId, name); } - private _onProcessLaunching(terminalId: number): void { - this._proxy.$acceptTerminalProcessLaunching(terminalId); - } - private _onTerminalRendererInput(terminalId: number, data: string): void { this._proxy.$acceptTerminalRendererInput(terminalId, data); } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index b9d3a816b71..2dc33f610eb 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -915,7 +915,6 @@ export interface ExtHostTerminalServiceShape { $acceptTerminalProcessId(id: number, processId: number): void; $acceptTerminalProcessData(id: number, data: string): void; $acceptTerminalRendererInput(id: number, data: string): void; - $acceptTerminalProcessLaunching(id: number): void; $acceptTerminalTitleChange(id: number, name: string): void; $acceptTerminalRendererDimensions(id: number, cols: number, rows: number): void; $createProcess(id: number, shellLaunchConfig: ShellLaunchConfigDto, activeWorkspaceRootUri: URI, cols: number, rows: number): void; diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 72353740da9..1f234e6cb22 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -90,7 +90,13 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi pid?: number ) { super(proxy, id); - this._createProcessIdPromise(pid); + this._pidPromise = new Promise(c => { + if (pid === RENDERER_NO_PROCESS_ID) { + c(undefined); + } else { + this._pidPromiseComplete = c; + } + }); } public create( @@ -133,21 +139,18 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi this._queueApiRequest(this._proxy.$hide, []); } - public _createProcessIdPromise(pid?: number): void { - this._pidPromise = new Promise(c => { - if (pid === RENDERER_NO_PROCESS_ID) { - c(undefined); - } else { - this._pidPromiseComplete = c; - } - }); - } - public _setProcessId(processId: number): void { // The event may fire 2 times when the panel is restored if (this._pidPromiseComplete) { this._pidPromiseComplete(processId); this._pidPromiseComplete = null; + } else { + // Recreate the promise if this is the nth processId set (eg. reused task terminals) + this._pidPromise.then(pid => { + if (pid !== processId) { + this._pidPromise = Promise.resolve(processId); + } + }); } } @@ -355,10 +358,6 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { this._performTerminalIdAction(id, terminal => terminal._setProcessId(processId)); } - public $acceptTerminalProcessLaunching(id: number): void { - this._performTerminalIdAction(id, terminal => terminal._createProcessIdPromise()); - } - private _performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void { let terminal = this._getTerminalById(id); if (terminal) { diff --git a/src/vs/workbench/parts/terminal/common/terminal.ts b/src/vs/workbench/parts/terminal/common/terminal.ts index dd6d918b928..c978bb94ab1 100644 --- a/src/vs/workbench/parts/terminal/common/terminal.ts +++ b/src/vs/workbench/parts/terminal/common/terminal.ts @@ -187,7 +187,6 @@ export interface ITerminalService { onTabDisposed: Event; onInstanceCreated: Event; onInstanceDisposed: Event; - onInstanceProcessLaunching: Event; onInstanceProcessIdReady: Event; onInstanceDimensionsChanged: Event; onInstanceRequestExtHostProcess: Event; @@ -323,8 +322,6 @@ export interface ITerminalInstance { onFocused: Event; - onProcessLaunching: Event; - onProcessIdReady: Event; onRequestExtHostProcess: Event; diff --git a/src/vs/workbench/parts/terminal/common/terminalService.ts b/src/vs/workbench/parts/terminal/common/terminalService.ts index ba694e55079..1ea70cdf23f 100644 --- a/src/vs/workbench/parts/terminal/common/terminalService.ts +++ b/src/vs/workbench/parts/terminal/common/terminalService.ts @@ -46,8 +46,6 @@ export abstract class TerminalService implements ITerminalService { public get onInstancesChanged(): Event { return this._onInstancesChanged.event; } protected readonly _onInstanceTitleChanged: Emitter = new Emitter(); public get onInstanceTitleChanged(): Event { return this._onInstanceTitleChanged.event; } - protected readonly _onInstanceProcessLaunching: Emitter = new Emitter(); - public get onInstanceProcessLaunching(): Event { return this._onInstanceProcessLaunching.event; } protected readonly _onActiveInstanceChanged: Emitter = new Emitter(); public get onActiveInstanceChanged(): Event { return this._onActiveInstanceChanged.event; } protected readonly _onTabDisposed: Emitter = new Emitter(); @@ -288,7 +286,6 @@ export abstract class TerminalService implements ITerminalService { instance.addDisposable(instance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged)); instance.addDisposable(instance.onProcessIdReady(this._onInstanceProcessIdReady.fire, this._onInstanceProcessIdReady)); instance.addDisposable(instance.onDimensionsChanged(() => this._onInstanceDimensionsChanged.fire(instance))); - instance.addDisposable(instance.onProcessLaunching(() => this._onInstanceProcessLaunching.fire(instance))); instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged)); } diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index 2c378d84c9c..3e8d85d2be9 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -104,8 +104,6 @@ export class TerminalInstance implements ITerminalInstance { public get onProcessIdReady(): Event { return this._onProcessIdReady.event; } private readonly _onTitleChanged: Emitter = new Emitter(); public get onTitleChanged(): Event { return this._onTitleChanged.event; } - private readonly _onProcessLaunching: Emitter = new Emitter(); - public get onProcessLaunching(): Event { return this._onProcessLaunching.event; } private readonly _onData: Emitter = new Emitter(); public get onData(): Event { return this._onData.event; } private readonly _onLineData: Emitter = new Emitter(); @@ -786,8 +784,6 @@ export class TerminalInstance implements ITerminalInstance { this._processManager.onProcessExit(exitCode => this._onProcessExit(exitCode)); this._processManager.onProcessData(data => this._onData.fire(data)); - this._onProcessLaunching.fire(this); - if (this._shellLaunchConfig.name) { this.setTitle(this._shellLaunchConfig.name, false); } else { -- GitLab