diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 94b1782e588..b26797bdef4 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -288,8 +288,8 @@ export abstract class BaseExtHostTerminalService implements IExtHostTerminalServ protected _activeTerminal: ExtHostTerminal | undefined; protected _terminals: ExtHostTerminal[] = []; protected _terminalProcesses: { [id: number]: ITerminalChildProcess } = {}; - protected _initialDimensions: { [id: number]: ITerminalDimensionsDto } = {}; - protected _startedExtensionTerminal: { [id: number]: boolean } = {}; + protected _initialDimensions: { [id: number]: ITerminalDimensionsDto | undefined } = {}; + protected _extensionTerminalAwaitingStart: { [id: number]: boolean | undefined } = {}; protected _getTerminalPromises: { [id: number]: Promise } = {}; public get activeTerminal(): ExtHostTerminal | undefined { return this._activeTerminal; } @@ -465,13 +465,12 @@ export abstract class BaseExtHostTerminalService implements IExtHostTerminalServ } await openPromise; - this._startedExtensionTerminal[id] = true; if (this._terminalProcesses[id]) { (this._terminalProcesses[id] as ExtHostPseudoterminal).startSendingEvents(initialDimensions); } else { - if (initialDimensions) { - this._initialDimensions[id] = initialDimensions; - } + // Defer startSendingEvents call to when _setupExtHostProcessListeners is called + this._extensionTerminalAwaitingStart[id] = true; + this._initialDimensions[id] = initialDimensions; } } @@ -489,7 +488,7 @@ export abstract class BaseExtHostTerminalService implements IExtHostTerminalServ } this._terminalProcesses[id] = p; - if (p instanceof ExtHostPseudoterminal && this._startedExtensionTerminal[id]) { + if (this._extensionTerminalAwaitingStart[id] && p instanceof ExtHostPseudoterminal) { p.startSendingEvents(this._initialDimensions[id]); delete this._initialDimensions[id]; } @@ -531,7 +530,7 @@ export abstract class BaseExtHostTerminalService implements IExtHostTerminalServ // Remove process reference delete this._terminalProcesses[id]; - delete this._startedExtensionTerminal[id]; + delete this._extensionTerminalAwaitingStart[id]; // Send exit event to main side this._proxy.$sendProcessExit(id, exitCode);