From e751278af141ec721a5efe742a175e7fcd14ba88 Mon Sep 17 00:00:00 2001 From: raidho36 Date: Wed, 2 Aug 2017 02:56:02 +0300 Subject: [PATCH] Fix issue #1303 --- src/modules/physics/box2d/World.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/modules/physics/box2d/World.cpp b/src/modules/physics/box2d/World.cpp index 8993cf39e..72973dc64 100644 --- a/src/modules/physics/box2d/World.cpp +++ b/src/modules/physics/box2d/World.cpp @@ -561,6 +561,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) @@ -578,13 +588,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; }