microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
162.65k stars 28.68k forks source link

Hang in a custom view #66401

Closed alexr00 closed 5 years ago

alexr00 commented 5 years ago

I think it happened when I was trying to expand the explorer view from hidden.

Enabled extensions that have a view in the explorer viewlet: Docker explorer

Stack:

event.ts:429 [bf1] potential listener LEAK detected, having 1495 listeners already. MOST frequent listener (1321): e.check @ event.ts:429 Object.defineProperty.get._event._event @ event.ts:509 i @ event.ts:31 (anonymous) @ treeModel.ts:86 e.run @ treeModel.ts:85 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 (anonymous) @ treeModel.ts:87 (anonymous) @ event.ts:40 e.fire @ event.ts:562 e.dispose @ treeModel.ts:34 (anonymous) @ treeModel.ts:104 _tickCallback @ internal/process/next_tick.js:68 Promise.then (async) e.run @ treeModel.ts:102 e.run @ treeModel.ts:94 e.refreshChildren @ treeModel.ts:532 e.doRefresh @ treeModel.ts:542 e.refresh @ treeModel.ts:550 e.refresh @ treeModel.ts:1021 e.refresh @ treeImpl.ts:161 (anonymous) @ customView.ts:511 t.doRefresh @ customView.ts:511 t.setVisibility @ customView.ts:339 t.updateTreeVisibility @ customView.ts:99 (anonymous) @ customView.ts:65 e.fire @ event.ts:562 t.setVisible @ panelViewlet.ts:89 (anonymous) @ viewsViewlet.ts:195 t.setVisible @ viewsViewlet.ts:195 t.setVisible @ explorerViewlet.ts:239 t.showComposite @ compositePart.ts:283 t.doOpenComposite @ compositePart.ts:146 t.openComposite @ compositePart.ts:110 n.doOpenViewlet @ sidebarPart.ts:224 n.openViewlet @ sidebarPart.ts:180 t.run @ activitybarActions.ts:69 t.runAction @ actions.ts:209 t.run @ actions.ts:201 t.onClick @ actionbar.ts:169 (anonymous) @ actionbar.ts:139 runCallback @ timers.js:696 tryOnImmediate @ timers.js:667 processImmediate @ timers.js:649

sandy081 commented 5 years ago

Steps to verify:

You can use the following sample code

'use strict';

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    const emitter = new vscode.EventEmitter();
    setInterval(() => emitter.fire(null), 500);
    vscode.window.registerTreeDataProvider('testView', <vscode.TreeDataProvider<string>>{
        onDidChangeTreeData: emitter.event,
        getChildren: (element?: string): string[] => {
            if (!element) {
                return ['a', 'b'];
            }
        },
        getTreeItem: (element: string): vscode.TreeItem => {
            return new vscode.TreeItem(element, vscode.TreeItemCollapsibleState.None);
        }
    });
}

Do not forget to register the tree in package.json