From dfcb1064f581396b71e97b3c664aaeaf3442facb Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Wed, 1 Apr 2026 08:49:28 -0400 Subject: [PATCH] Fix memory leak in chat terminal tool from accumulated disposables (#306832) fix #289711 --- .../chatAgentTools/browser/tools/runInTerminalTool.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index 2ad6ff0d202..b7b727c4cfe 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -1496,7 +1496,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { toolTerminal.receivedUserInput = data.length > 0; } }); - this._register(toolTerminal.instance.onDisposed(() => disposable.dispose())); + Event.once(toolTerminal.instance.onDisposed)(() => disposable.dispose()); } @@ -1526,9 +1526,9 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { this._terminalChatService.registerTerminalInstanceWithChatSession(chatSessionResource, instance); // Listen for terminal disposal to clean up storage - this._register(instance.onDisposed(() => { + Event.once(instance.onDisposed)(() => { this._removeProcessIdAssociation(instance.processId!); - })); + }); } } } @@ -1539,11 +1539,11 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { private async _setupProcessIdAssociation(toolTerminal: IToolTerminal, chatSessionResource: URI, termId: string, isBackground: boolean) { await this._associateProcessIdWithSession(toolTerminal.instance, chatSessionResource, termId, toolTerminal.shellIntegrationQuality, isBackground); - this._register(toolTerminal.instance.onDisposed(() => { + Event.once(toolTerminal.instance.onDisposed)(() => { if (toolTerminal!.instance.processId) { this._removeProcessIdAssociation(toolTerminal!.instance.processId); } - })); + }); } private async _associateProcessIdWithSession(terminal: ITerminalInstance, chatSessionResource: URI, id: string, shellIntegrationQuality: ShellIntegrationQuality, isBackground?: boolean): Promise {