matrix-org / thirdroom

Open, decentralised, immersive worlds built on Matrix
https://thirdroom.io
Apache License 2.0
606 stars 65 forks source link

WebSG - disposal leak upon certain script errors #605

Open NateTheGreatt opened 1 year ago

NateTheGreatt commented 1 year ago

reproducing script:

world.onenter = () => {
  const scene = world.environment;

  const boxNode = world.createNode({
    mesh: world.createBoxMesh({
      size: [1, 1, 1],
      segments: [1, 1, 1],
      material: world.createMaterial({
        baseColorFactor: [1, 1, 1, 1],
      }),
    }),
    collider: world.createCollider({ type: "box", size: [1, 1, 1] }),
  });

  boxNode.addPhysicsBody({ type: WebSG.PhysicsBodyType.Kinematic });

  // cause the script to error out before the node is added to the scene 
  boxNode.notAFunction();

  scene.addNode(boxNode);
};

By causing the script to error out before the node is added to the scene, a detached physics body is created that never gets disposed of, even when switching worlds.