fix: clear lastUsedTerminal in dispose() to prevent memory leak

- Added cleanup of lastUsedTerminal property in Task.dispose() method
- Prevents terminal references from being retained after task disposal
- Added test to verify proper cleanup on disposal
This commit is contained in:
Daniel Riccio 2025-09-03 14:00:55 -05:00
parent 4108f30ba6
commit 44006a2d50
No known key found for this signature in database
GPG key ID: B3CDA0E073DD9856
2 changed files with 23 additions and 0 deletions

View file

@ -1453,6 +1453,8 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
try {
// Release any terminals associated with this task.
TerminalRegistry.releaseTerminalsForTask(this.taskId)
// Clear the lastUsedTerminal reference to prevent memory leaks
this.lastUsedTerminal = undefined
} catch (error) {
console.error("Error releasing terminals:", error)
}

View file

@ -198,4 +198,25 @@ describe("Task dispose method", () => {
// Verify total listener count is 0
expect(task.eventNames().length).toBe(0)
})
test("should clear lastUsedTerminal reference to prevent memory leaks", () => {
// Mock a terminal object
const mockTerminal = {
id: "test-terminal-id",
name: "Test Terminal",
dispose: vi.fn(),
}
// Set lastUsedTerminal on the task
;(task as any).lastUsedTerminal = mockTerminal
// Verify it's set
expect((task as any).lastUsedTerminal).toBe(mockTerminal)
// Call dispose
task.dispose()
// Verify lastUsedTerminal is cleared
expect((task as any).lastUsedTerminal).toBeUndefined()
})
})