diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 5148e58619b..3a3ab2be69d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -202,36 +202,39 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { get icon(): TerminalIcon | undefined { return this._getIcon(); } get color(): string | undefined { return this._getColor(); } + // The onExit event is special in that it fires and is disposed after the terminal instance + // itself is disposed private readonly _onExit = new Emitter(); - get onExit(): Event { return this._onExit.event; } - private readonly _onDisposed = new Emitter(); - get onDisposed(): Event { return this._onDisposed.event; } - private readonly _onFocused = new Emitter(); - get onFocused(): Event { return this._onFocused.event; } - private readonly _onProcessIdReady = new Emitter(); - get onProcessIdReady(): Event { return this._onProcessIdReady.event; } - private readonly _onLinksReady = new Emitter(); - get onLinksReady(): Event { return this._onLinksReady.event; } - private readonly _onTitleChanged = new Emitter(); - get onTitleChanged(): Event { return this._onTitleChanged.event; } - private readonly _onIconChanged = new Emitter(); - get onIconChanged(): Event { return this._onIconChanged.event; } - private readonly _onData = new Emitter(); - get onData(): Event { return this._onData.event; } - private readonly _onBinary = new Emitter(); - get onBinary(): Event { return this._onBinary.event; } - private readonly _onLineData = new Emitter(); - get onLineData(): Event { return this._onLineData.event; } - private readonly _onRequestExtHostProcess = new Emitter(); - get onRequestExtHostProcess(): Event { return this._onRequestExtHostProcess.event; } - private readonly _onDimensionsChanged = new Emitter(); - get onDimensionsChanged(): Event { return this._onDimensionsChanged.event; } - private readonly _onMaximumDimensionsChanged = new Emitter(); - get onMaximumDimensionsChanged(): Event { return this._onMaximumDimensionsChanged.event; } - private readonly _onFocus = new Emitter(); - get onFocus(): Event { return this._onFocus.event; } - private readonly _onRequestAddInstanceToGroup = new Emitter(); - get onRequestAddInstanceToGroup(): Event { return this._onRequestAddInstanceToGroup.event; } + readonly onExit = this._onExit.event; + + private readonly _onDisposed = this._register(new Emitter()); + readonly onDisposed = this._onDisposed.event; + private readonly _onFocused = this._register(new Emitter()); + readonly onFocused = this._onFocused.event; + private readonly _onProcessIdReady = this._register(new Emitter()); + readonly onProcessIdReady = this._onProcessIdReady.event; + private readonly _onLinksReady = this._register(new Emitter()); + readonly onLinksReady = this._onLinksReady.event; + private readonly _onTitleChanged = this._register(new Emitter()); + readonly onTitleChanged = this._onTitleChanged.event; + private readonly _onIconChanged = this._register(new Emitter()); + readonly onIconChanged = this._onIconChanged.event; + private readonly _onData = this._register(new Emitter()); + readonly onData = this._onData.event; + private readonly _onBinary = this._register(new Emitter()); + readonly onBinary = this._onBinary.event; + private readonly _onLineData = this._register(new Emitter()); + readonly onLineData = this._onLineData.event; + private readonly _onRequestExtHostProcess = this._register(new Emitter()); + readonly onRequestExtHostProcess = this._onRequestExtHostProcess.event; + private readonly _onDimensionsChanged = this._register(new Emitter()); + readonly onDimensionsChanged = this._onDimensionsChanged.event; + private readonly _onMaximumDimensionsChanged = this._register(new Emitter()); + readonly onMaximumDimensionsChanged = this._onMaximumDimensionsChanged.event; + private readonly _onFocus = this._register(new Emitter()); + readonly onFocus = this._onFocus.event; + private readonly _onRequestAddInstanceToGroup = this._register(new Emitter()); + readonly onRequestAddInstanceToGroup = this._onRequestAddInstanceToGroup.event; constructor( private readonly _terminalFocusContextKey: IContextKey, @@ -1299,6 +1302,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { } this._onExit.fire(this._exitCode); + this._onExit.dispose(); } /**