BGE: Fix T35188: Duplicate an instance of group.
authorPorteries Tristan <republicthunderbolt9@gmail.com>
Wed, 28 Oct 2015 20:58:40 +0000 (21:58 +0100)
committerPorteries Tristan <republicthunderbolt9@gmail.com>
Wed, 28 Oct 2015 21:11:15 +0000 (22:11 +0100)
This behavior caused a double free.
Before when we duplicated an instance of a group the new instance keep the pointer of the group but was not added in the group instance list (normal).
And during the object deletion we tried to remove the object in the instance list but anyways if it failed decrement the reference count.
Set the group and the instance list to NULL in ProcessReplica avoid these kind of problems.

source/gameengine/Ketsji/KX_GameObject.cpp

index 974a2e56d16d7c6f32c7f67cc5ec582ed29ed1ae..5e66250bd8077c0d952bbb48e4d37a504ee75e1b 100644 (file)
@@ -518,6 +518,11 @@ void KX_GameObject::ProcessReplica()
        m_pGraphicController = NULL;
        m_pPhysicsController = NULL;
        m_pSGNode = NULL;
+
+       /* Dupli group and instance list are set later in replication.
+        * See KX_Scene::DupliGroupRecurse. */
+       m_pDupliGroupObject = NULL;
+       m_pInstanceObjects = NULL;
        m_pClient_info = new KX_ClientObjectInfo(*m_pClient_info);
        m_pClient_info->m_gameobject = this;
        m_actionManager = NULL;