Fixing up some buggy cleanup code in BL_ShapeDeformer. This code was causing crashes...
authorMitchell Stokes <mogurijin@gmail.com>
Tue, 14 Feb 2012 07:54:12 +0000 (07:54 +0000)
committerMitchell Stokes <mogurijin@gmail.com>
Tue, 14 Feb 2012 07:54:12 +0000 (07:54 +0000)
[#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

index fb0a86d..bb36368 100644 (file)
@@ -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;
        }
 };