-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
type/bugSomething is misbehavingSomething is misbehaving
Milestone
Description
Details
- Browser and browser version: VSCode 1.85.1
- OS version: Ubuntu 23.04
- xterm.js version: 5.4.0-beta.20
Steps to reproduce
- In VSCode, create a terminal and then kill the terminal
- Notice that a
resize,change,blurandfocushave been added inCoreBrowserService.tsbut not been removed:
{
"eventListeners": [
{
"type": "resize",
"description": "()=>this._setDprAndFireIfDiffers()",
"stack": ["listener (vscode/node_modules/@xterm/xterm/lib/xterm.js:0:104883)"],
"count": 1,
"originalStack": ["webpack://@xterm/xterm/src/browser/services/CoreBrowserService.ts:105:94"],
"originalName": null
},
{
"type": "change",
"description": "()=>this._setDprAndFireIfDiffers()",
"stack": ["listener (vscode/node_modules/@xterm/xterm/lib/xterm.js:0:104453)"],
"count": 1,
"originalStack": ["webpack://@xterm/xterm/src/browser/services/CoreBrowserService.ts:86:26"],
"originalName": null
},
{
"type": "blur",
"description": "()=>this._isFocused=!1",
"stack": ["listener (vscode/node_modules/@xterm/xterm/lib/xterm.js:0:103775)"],
"count": 1,
"originalStack": ["webpack://@xterm/xterm/src/browser/services/CoreBrowserService.ts:35:44"],
"originalName": null
},
{
"type": "focus",
"description": "()=>this._isFocused=!0",
"stack": ["listener (vscode/node_modules/@xterm/xterm/lib/xterm.js:0:103710)"],
"count": 1,
"originalStack": ["webpack://@xterm/xterm/src/browser/services/CoreBrowserService.ts:34:45"],
"originalName": null
}
],
"isLeak": true
}Test script
(Note: the test script might not work on windows unfortunately):
git clone [email protected]:SimonSiefke/vscode-memory-leak-finder.git &&
cd vscode-memory-leak-finder &&
git checkout v5.35.0 &&
npm ci &&
node packages/cli/bin/test.js --cwd packages/e2e --check-leaks --measure event-listeners --measure-after --runs 1 --only terminal.create &&
cat .vscode-memory-leak-finder-results/event-listeners/terminal.create.jsonAdditional information
It seems that in CoreBrowserService.ts, ScreenDprMonitor is not registered like other disposables, which could cause leaking event listeners:
export class CoreBrowserService extends Disposable implements ICoreBrowserService {
public serviceBrand: undefined;
private _isFocused = false;
private _cachedIsFocused: boolean | undefined = undefined;
private _screenDprMonitor = new ScreenDprMonitor(this._window); // not registeredThe blur and focus textarea event listeners could be disposed with addDisposableDomListener:
this.register(addDisposableDomListener(this._textarea, 'focus', () => (this._isFocused = true)));
this.register(addDisposableDomListener(this._textarea, 'blur', () => (this._isFocused = false)));
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
type/bugSomething is misbehavingSomething is misbehaving