Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/vs/workbench/browser/window.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ export abstract class BaseWindow extends Disposable {
didClear = true;
(window as { vscodeOriginalClearTimeout?: typeof window.clearTimeout }).vscodeOriginalClearTimeout?.apply(this, [handle]);
timeoutDisposables.delete(timeoutDisposable);
disposables.delete(timeoutDisposable);
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

disposables.delete(timeoutDisposable) will call timeoutDisposable.dispose() again while it's already disposing. This currently happens to be a no-op for toDisposable, but it relies on idempotent disposal and adds unnecessary reentrancy. Consider using DisposableStore.deleteAndLeak(timeoutDisposable) here to just remove the reference (since the disposable is already being disposed).

Suggested change
disposables.delete(timeoutDisposable);
disposables.deleteAndLeak(timeoutDisposable);

Copilot uses AI. Check for mistakes.
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change fixes a leak by removing the timeout disposable from the per-window DisposableStore, but there is no regression test asserting that the store no longer retains the disposed timeout after it fires/gets cleared. Since this behavior is subtle and easy to regress, please add a unit test in src/vs/workbench/test/browser/window.test.ts that validates the window's disposable store count returns to the original value after the multi-window timeout completes/clears.

Copilot uses AI. Check for mistakes.
});

disposables.add(timeoutDisposable);
Expand Down
Loading