From be114086f223345f97f033dd9350a918dbb0eec5 Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Mon, 4 Nov 2013 19:22:52 +0000 Subject: [PATCH] BGE: The recent physics cleanup was using KX_GameObject::GetParent() with out calling parent->Release(). Since GetParent() does an AddRef(), this was causing a leak, which resulted in Zombie Object errors. --- source/gameengine/Ketsji/KX_Scene.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index 1d95beed6e9..2cddb073b41 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -567,11 +567,16 @@ KX_GameObject* KX_Scene::AddNodeReplicaObject(class SG_IObject* node, class CVal { PHY_IMotionState* motionstate = new KX_MotionState(newobj->GetSGNode()); PHY_IPhysicsController* newctrl = orgobj->GetPhysicsController()->GetReplica(); - PHY_IPhysicsController* parentctrl = (newobj->GetParent()) ? newobj->GetParent()->GetPhysicsController() : NULL; + + KX_GameObject *parent = newobj->GetParent(); + PHY_IPhysicsController* parentctrl = (parent) ? parent->GetPhysicsController() : NULL; newctrl->SetNewClientInfo(newobj->getClientInfo()); newobj->SetPhysicsController(newctrl, newobj->IsDynamic()); newctrl->PostProcessReplica(motionstate, parentctrl); + + if (parent) + parent->Release(); } return newobj; }