From 62bd82385e2c658db15fac6bc04b9edfa54526d1 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 3 Oct 2024 05:20:50 -0700 Subject: [PATCH] Don't instantiate addons if terminal is disposed Fixes #230246 --- .../workbench/contrib/terminal/browser/terminalInstance.ts | 7 ++++++- .../contrib/terminal/browser/xterm/xtermTerminal.ts | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 6b5872811f7..64593ae1249 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -905,7 +905,12 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this.xterm?.refresh(); - setTimeout(() => this._initDragAndDrop(container)); + setTimeout(() => { + if (this._store.isDisposed) { + return; + } + this._initDragAndDrop(container); + }, 0); } /** diff --git a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts index c7415250eb5..3b5a8c644df 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts @@ -266,6 +266,9 @@ export class XtermTerminal extends Disposable implements IXtermTerminal, IDetach this._shellIntegrationAddon = new ShellIntegrationAddon(options.shellIntegrationNonce ?? '', options.disableShellIntegrationReporting, this._telemetryService, this._logService); this.raw.loadAddon(this._shellIntegrationAddon); this._xtermAddonLoader.importAddon('clipboard').then(ClipboardAddon => { + if (this._store.isDisposed) { + return; + } this._clipboardAddon = this._instantiationService.createInstance(ClipboardAddon, undefined, { async readText(type: ClipboardSelectionType): Promise { return _clipboardService.readText(type === 'p' ? 'selection' : 'clipboard'); @@ -470,6 +473,9 @@ export class XtermTerminal extends Disposable implements IXtermTerminal, IDetach private _getSearchAddon(): Promise { if (!this._searchAddonPromise) { this._searchAddonPromise = this._xtermAddonLoader.importAddon('search').then((AddonCtor) => { + if (this._store.isDisposed) { + return Promise.reject('Could not create search addon, terminal is disposed'); + } this._searchAddon = new AddonCtor({ highlightLimit: XtermTerminalConstants.SearchHighlightLimit }); this.raw.loadAddon(this._searchAddon); this._searchAddon.onDidChangeResults((results: { resultIndex: number; resultCount: number }) => {