diff --git a/src/modules/physics/box2d/World.cpp b/src/modules/physics/box2d/World.cpp index 6baadbeda..1b39b3868 100644 --- a/src/modules/physics/box2d/World.cpp +++ b/src/modules/physics/box2d/World.cpp @@ -568,6 +568,16 @@ void World::destroy() return; } + // Remove userdata reference to avoid it sticking around after GC + if (begin.ref) begin.ref->unref(); + if (end.ref) end.ref->unref(); + if (presolve.ref) presolve.ref->unref(); + if (postsolve.ref) postsolve.ref->unref(); + if (filter.ref) filter.ref->unref(); + + //disable callbacks + begin.ref = end.ref = presolve.ref = postsolve.ref = filter.ref = nullptr; + // Cleaning up the world. b2Body *b = world->GetBodyList(); while (b) @@ -585,13 +595,6 @@ void World::destroy() world->DestroyBody(groundBody); Memoizer::remove(world); - // Remove userdata reference to avoid it sticking around after GC - if (begin.ref) begin.ref->unref(); - if (end.ref) end.ref->unref(); - if (presolve.ref) presolve.ref->unref(); - if (postsolve.ref) postsolve.ref->unref(); - if (filter.ref) filter.ref->unref(); - delete world; world = nullptr; }