Only set _extensionTerminalAwaitingStart when deferred start is needed

This commit is contained in:
Daniel Imms
2019-11-17 12:52:17 -08:00
parent 1004d51605
commit 6d7f763548

View File

@@ -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<ExtHostTerminal> } = {};
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);