Skip to content

Promise memory leak when duplicating selection #276612

@SimonSiefke

Description

@SimonSiefke

Expected behaviour

When duplicating selected text and then deleting it again, the number of promises stays the same

Actual behaviour

When duplicating selected text and then deleting it, the number of promises increases each time. Duplicating selection 197 times in VS Code 1.105.1:

{
  "promisesWithStackTrace": [
    {
      "count": 394,
      "properties": [
        {
          "name": "[[PromiseState]]",
          "type": "string",
          "value": "pending"
        },
        {
          "name": "[[PromiseResult]]",
          "type": "undefined",
          "value": "undefined"
        }
      ],
      "originalStack": [
        "src/vs/editor/contrib/folding/browser/folding.ts:345:6",
        "src/vs/editor/contrib/folding/browser/folding.ts:301:7",
        "src/vs/editor/contrib/folding/browser/folding.ts:251:96",
        "src/vs/base/common/event.ts:1201:12",
        "src/vs/base/common/event.ts:1212:17",
        "src/vs/base/common/event.ts:1236:22",
        "src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts:1816:35",
        "src/vs/base/common/event.ts:1201:12"
      ]
    },
    {
      "count": 394,
      "properties": [
        {
          "name": "[[PromiseState]]",
          "type": "string",
          "value": "fulfilled"
        },
        {
          "name": "[[PromiseResult]]",
          "type": "undefined",
          "value": "undefined"
        }
      ],
      "originalStack": [
        "src/vs/workbench/contrib/comments/browser/commentsController.ts:710:6",
        "src/vs/workbench/contrib/comments/browser/commentsController.ts:939:9",
        "src/vs/base/common/event.ts:1201:12",
        "src/vs/base/common/event.ts:1212:17",
        "src/vs/base/common/event.ts:1236:22",
        "src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts:1816:35",
        "src/vs/base/common/event.ts:1201:12",
        "src/vs/base/common/event.ts:1232:17"
      ]
    },
    {
      "count": 197,
      "properties": [
        {
          "name": "[[PromiseState]]",
          "type": "string",
          "value": "fulfilled"
        },
        {
          "name": "[[PromiseResult]]",
          "type": "undefined",
          "value": "undefined"
        }
      ],
      "originalStack": [
        "src/vs/workbench/contrib/scm/browser/quickDiffModel.ts:232:10",
        "src/vs/editor/common/model/textModel.ts:243:87",
        "src/vs/base/common/event.ts:1201:12",
        "src/vs/base/common/event.ts:1212:17",
        "src/vs/base/common/event.ts:1236:22",
        "src/vs/editor/common/model/textModel.ts:2669:22",
        "src/vs/editor/common/model/textModel.ts:1432:22"
      ]
    },
    {
      "count": 197,
      "properties": [
        {
          "name": "[[PromiseState]]",
          "type": "string",
          "value": "fulfilled"
        },
        {
          "name": "[[PromiseResult]]",
          "type": "undefined",
          "value": "undefined"
        }
      ],
      "originalStack": [
        "src/vs/workbench/contrib/scm/browser/quickDiffModel.ts:232:10",
        "src/vs/editor/common/model/textModel.ts:243:87",
        "src/vs/base/common/event.ts:1201:12",
        "src/vs/base/common/event.ts:1212:17",
        "src/vs/base/common/event.ts:1236:22",
        "src/vs/editor/common/model/textModel.ts:2669:22",
        "src/vs/editor/common/model/textModel.ts:1301:22"
      ]
    }
  ]}

Based on the stack traces, it seems to show 4 promise memory leaks:

  • one related to folding
  • one related to commentsController
  • two related to quickDiffModel

Additional information

Test script for leaked promises:

git clone git@github.com:SimonSiefke/vscode-memory-leak-finder.git &&
cd vscode-memory-leak-finder &&
npm ci &&
node packages/cli/bin/test.js --cwd packages/e2e   --only editor.duplicate-selection --runs 97 --check-leaks --measure promises-with-stack-trace --run-skipped-tests-anyway --measure-after &&
cat .vscode-memory-leak-finder-results/promises-with-stack-trace/editor.duplicate-selection.json

The script can also be run with a local vscode version by passing --vscode-version "/some/custom/path/to/vscode/scripts/code.sh".

Other

Does this issue occur when all extensions are disabled?: Yes

  • VS Code Version: 1.105.1
  • OS Version: Ubuntu 25.04

Metadata

Metadata

Assignees

Labels

editor-foldingEditor code folding issuesfreeze-slow-crash-leakVS Code crashing, performance, freeze and memory leak issues

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions