Skip to content

Commit 729f978

Browse files
authored
fix(world): clean up dynamicAnchor listener on dispose (#767)
The dynamicAnchor setter never assigned _dynamicAnchor, so the getter always returned false, and dispose never removed the pointerdown listener, keeping the whole world alive (a leak visible on React remounts). Assign the flag and remove the listener on dispose. Co-authored-by: ShaMan123 <34343793+ShaMan123@users.noreply.github.com>
1 parent 3bae4de commit 729f978

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

packages/core/src/core/Worlds/src/simple-world.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export class SimpleWorld<
7373
} else {
7474
container.removeEventListener("pointerdown", this.onPointerDown);
7575
}
76+
this._dynamicAnchor = value;
7677
}
7778

7879
get dynamicAnchor() {
@@ -234,6 +235,13 @@ export class SimpleWorld<
234235
this.enabled = false;
235236
this.isDisposing = true;
236237

238+
// Remove the dynamic anchoring listener before the renderer is disposed
239+
const container = this.renderer?.three.domElement.parentElement;
240+
if (container) {
241+
container.removeEventListener("pointerdown", this.onPointerDown);
242+
}
243+
this._dynamicAnchor = false;
244+
237245
this.scene.onWorldChanged.trigger({ world: this, action: "removed" });
238246
this.camera.onWorldChanged.trigger({ world: this, action: "removed" });
239247
if (this.renderer) {

0 commit comments

Comments
 (0)