diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 588c01f8628d2..b7c26c253a76d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -1330,6 +1330,11 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._exitReason = reason ?? TerminalExitReason.Unknown; } + // Dispose the resize debouncer before the process manager so that no + // resize callbacks can fire after ptyProcessReady has been nulled. + this._resizeDebouncer?.dispose(); + this._resizeDebouncer = undefined; + this._processManager.dispose(); // Process manager dispose/shutdown doesn't fire process exit, trigger with undefined if it // hasn't happened yet diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index 274c4b481e5b9..0c7cec8eca3c4 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -605,6 +605,9 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce return; } + if (!this.ptyProcessReady) { + return Promise.resolve(); + } return this.ptyProcessReady.then(() => this._resize(cols, rows, pixelWidth, pixelHeight)); }