What: Icon loads are async and uncancelled. If dispose() (or setSlots/resize → clearGroup()) runs before the callback, addIconMesh still group.add(mesh) and pushes onto iconSprites. The disposed HUD grows a stray textured quad; a rebuild can also get icons at the previous slot positions.
Repro (unit): stub TextureLoader.load to defer onLoad, setSlots([{icon:'/x.png'}]), dispose(), then fire the callback → group.children.length === 1.
Expected: ignore the callback if disposed / generation changed, or abort in-flight loads on clearGroup/dispose.
Found by Wave 8 a2 coverage tests.
**Where:** `projects/spikersoft/src/app/_components/_games/dungeon-crawler/hud/skill-bar-hud.ts` — `loadIcon()` TextureLoader callback → `addIconMesh()`.
**What:** Icon loads are async and uncancelled. If `dispose()` (or `setSlots`/`resize` → `clearGroup()`) runs before the callback, `addIconMesh` still `group.add(mesh)` and pushes onto `iconSprites`. The disposed HUD grows a stray textured quad; a rebuild can also get icons at the *previous* slot positions.
**Repro (unit):** stub `TextureLoader.load` to defer `onLoad`, `setSlots([{icon:'/x.png'}])`, `dispose()`, then fire the callback → `group.children.length === 1`.
**Expected:** ignore the callback if disposed / generation changed, or abort in-flight loads on `clearGroup`/`dispose`.
Found by Wave 8 a2 coverage tests.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Where:
projects/spikersoft/src/app/_components/_games/dungeon-crawler/hud/skill-bar-hud.ts—loadIcon()TextureLoader callback →addIconMesh().What: Icon loads are async and uncancelled. If
dispose()(orsetSlots/resize→clearGroup()) runs before the callback,addIconMeshstillgroup.add(mesh)and pushes ontoiconSprites. The disposed HUD grows a stray textured quad; a rebuild can also get icons at the previous slot positions.Repro (unit): stub
TextureLoader.loadto deferonLoad,setSlots([{icon:'/x.png'}]),dispose(), then fire the callback →group.children.length === 1.Expected: ignore the callback if disposed / generation changed, or abort in-flight loads on
clearGroup/dispose.Found by Wave 8 a2 coverage tests.
Fixed in
spikersoft-angularPR #823 (a0f0ccd9). Closing.