From 23b682d5948e98264340e6dc81237b81d299b5b0 Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Tue, 13 May 2014 15:50:28 -0700 Subject: Fix T40172: LibFree() crashes with shared materials (e.g., from multiple LibNew() calls) --- source/gameengine/Converter/KX_BlenderSceneConverter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'source/gameengine') diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 5930d5e90d2..7d7f8ebd4b3 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -1237,6 +1237,16 @@ bool KX_BlenderSceneConverter::FreeBlendFile(struct Main *maggie) gameobj->RemoveMeshes(); /* XXX - slack, should only remove meshes that are library items but mostly objects only have 1 mesh */ break; } + else { + /* also free the mesh if it's using a tagged material */ + int mat_index = mesh->NumMaterials(); + while (mat_index--) { + if (IS_TAGGED(mesh->GetMeshMaterial(mat_index)->m_bucket->GetPolyMaterial()->GetBlenderMaterial())) { + gameobj->RemoveMeshes(); /* XXX - slack, same as above */ + break; + } + } + } } /* make sure action actuators are not referencing tagged actions */ -- cgit v1.2.3