Fix memory leak in chat terminal tool from accumulated disposables (#306832)

fix #289711
This commit is contained in:
Megan Rogge
2026-04-01 08:49:28 -04:00
committed by GitHub
parent 5858c4ded0
commit dfcb1064f5

View File

@@ -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<void> {