diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index caf04c46e88..7883f70b7b6 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -268,8 +268,13 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape } private _onTerminalRequestVirtualProcess(proxy: ITerminalProcessExtHostProxy): void { - this._terminalProcessesReady[proxy.terminalId](proxy); - delete this._terminalProcessesReady[proxy.terminalId]; + const ready = this._terminalProcessesReady[proxy.terminalId]; + if (!ready) { + this._terminalProcesses[proxy.terminalId] = Promise.resolve(proxy); + } else { + ready(proxy); + delete this._terminalProcessesReady[proxy.terminalId]; + } // Note that onReisze is not being listened to here as it needs to fire when max dimensions // change, excluding the dimension override diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 744c0ca3c2c..ce45045e375 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -337,7 +337,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { return terminal; } - public async attachVirtualProcessToTerminal(id: number, virtualProcess: vscode.TerminalVirtualProcess): Promise { + public attachVirtualProcessToTerminal(id: number, virtualProcess: vscode.TerminalVirtualProcess) { const terminal = this._getTerminalById(id); if (!terminal) { throw new Error(`Cannot resolve terminal with id ${id} for virtual process`); @@ -411,7 +411,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { } return; } - this._performTerminalIdAction(id, terminal => { + this.performTerminalIdAction(id, terminal => { if (terminal) { this._activeTerminal = terminal; if (original !== this._activeTerminal) { @@ -496,10 +496,10 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { } public $acceptTerminalProcessId(id: number, processId: number): void { - this._performTerminalIdAction(id, terminal => terminal._setProcessId(processId)); + this.performTerminalIdAction(id, terminal => terminal._setProcessId(processId)); } - private _performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void { + public performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void { let terminal = this._getTerminalById(id); if (terminal) { callback(terminal);