From fbc568228940a73c1c088fb17695eb3552d1c84d Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 7 Jul 2021 07:05:18 -0700 Subject: [PATCH] Dispose of emitters on terminal instance Fixes #92649 --- .../terminal/browser/terminalInstance.ts | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) 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(); } /**