Skip to content

Commit 44006a2

Browse files
committed
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
1 parent 4108f30 commit 44006a2

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/core/task/Task.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,6 +1453,8 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
14531453
try {
14541454
// Release any terminals associated with this task.
14551455
TerminalRegistry.releaseTerminalsForTask(this.taskId)
1456+
// Clear the lastUsedTerminal reference to prevent memory leaks
1457+
this.lastUsedTerminal = undefined
14561458
} catch (error) {
14571459
console.error("Error releasing terminals:", error)
14581460
}

src/core/task/__tests__/Task.dispose.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,25 @@ describe("Task dispose method", () => {
198198
// Verify total listener count is 0
199199
expect(task.eventNames().length).toBe(0)
200200
})
201+
202+
test("should clear lastUsedTerminal reference to prevent memory leaks", () => {
203+
// Mock a terminal object
204+
const mockTerminal = {
205+
id: "test-terminal-id",
206+
name: "Test Terminal",
207+
dispose: vi.fn(),
208+
}
209+
210+
// Set lastUsedTerminal on the task
211+
;(task as any).lastUsedTerminal = mockTerminal
212+
213+
// Verify it's set
214+
expect((task as any).lastUsedTerminal).toBe(mockTerminal)
215+
216+
// Call dispose
217+
task.dispose()
218+
219+
// Verify lastUsedTerminal is cleared
220+
expect((task as any).lastUsedTerminal).toBeUndefined()
221+
})
201222
})

0 commit comments

Comments
 (0)