fix(ecs): the WASM registry and Entity handles are never freed

Aberta
#492 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
typescript, wasm
Domínio
backend

Direção de pesquisa

Read modules/ecs/src/shared/ecs-library.ts and modules/ecs/src/shared/editor-world.ts at the linked lines, then inspect the Registry cleanup methods in modules/ecs/wasm/Registry.hpp. Trace how __init, clear_entities, and the editor tracker manage handles; done means systems, entities, and the registry are released when the library or tracker is cleared. No test file is named in the issue.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug modules:ecs
Which package is this bug report for?

ecs

Issue description

EcsLibrary has no __clear and never delete()s its Registry, which holds every component and system through embind handles; each __init instantiates a new WASM module. The editor tracker keeps the Entity handles returned by spawnEntity and never .delete()s them. clear_entities leaves _systems in place. Memory grows with every editor restart and every spawn in live mode.

Where:

Evidence:

this._module = await this.loadModule({ locateFile: () => wasmUrl });
this._registry = new this._module.Registry();
...
entities.set(entity.getId(), { entity, ... });

Suggested fix: Add a __clear that clears systems and entities, calls registry.delete() and drops the reference. Call entity.delete() when the tracker drops an entity.

Found during a code audit of main at be72076.

Code sample

No response

Versions
  • Engine main at be72076
  • pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority

Medium (should be fixed soon)

I have tested this issue on a development release

be72076

Linguagem predominante
TypeScript
Estrelas
7
Forks
2
Merge médio
1d 17h
PRs com merge (30d)
17

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de NanoForge-dev/Engine

Todas as issues de NanoForge-dev/Engine

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.