From 6905d0d92b7f2faf0d9d26a17f495a663908ec69 Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Tue, 14 Feb 2012 07:54:12 +0000 Subject: Fixing up some buggy cleanup code in BL_ShapeDeformer. This code was causing crashes and corrupting shape keys. This commit fixes the following bugs: [#30059] Shape Keys is gone in Blender if you use Add Object Actuator in BGE [#30024] Segmentation fault after addObject when using shape keys [#28683] segfault in shapekey conversion code when running a game (YF, level home) twice --- source/gameengine/Converter/BL_ShapeDeformer.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'source') diff --git a/source/gameengine/Converter/BL_ShapeDeformer.cpp b/source/gameengine/Converter/BL_ShapeDeformer.cpp index fb0a86d6084..bb3636881ea 100644 --- a/source/gameengine/Converter/BL_ShapeDeformer.cpp +++ b/source/gameengine/Converter/BL_ShapeDeformer.cpp @@ -50,6 +50,8 @@ #include "DNA_meshdata_types.h" #include "BKE_armature.h" #include "BKE_action.h" +#include "BKE_global.h" +#include "BKE_main.h" #include "BKE_key.h" #include "BKE_ipo.h" #include "MT_Point3.h" @@ -97,10 +99,13 @@ BL_ShapeDeformer::BL_ShapeDeformer(BL_DeformableGameObject *gameobj, BL_ShapeDeformer::~BL_ShapeDeformer() { - if (m_key && m_bmesh->key) + if (m_key && m_bmesh->key && m_key != m_bmesh->key) { free_key(m_bmesh->key); + BLI_remlink_safe(&G.main->key, m_bmesh->key); + MEM_freeN(m_bmesh->key); m_bmesh->key = m_key; + m_key = NULL; } }; -- cgit v1.2.3