Commit: dfbcbaf7eb99b827144f7f47aa963873e56fd97a
Author: Martin Felke
Date:   Sat Jun 17 21:08:54 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rBdfbcbaf7eb99b827144f7f47aa963873e56fd97a

fix attempt for memory leak after loading FM blends in prefractured mode

note: works only with newly saved FM files, older still have unnecessary data 
in them which wont be automatically cleaned

===================================================================

M       source/blender/blenkernel/intern/fracture.c
M       source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/source/blender/blenkernel/intern/fracture.c 
b/source/blender/blenkernel/intern/fracture.c
index a5a564c917c..c8401d94583 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -1922,7 +1922,7 @@ void BKE_fracmesh_free(FracMesh *fm, bool doCustomData)
 
        while (fm->shard_map.first) {
                Shard* s = (Shard*)fm->shard_map.first;
-               BLI_remlink_safe(&fm->shard_map, s);
+               BLI_remlink(&fm->shard_map, s);
                BKE_shard_free(s, doCustomData);
        }
 
diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index c7df550bc0c..4a3d9f534fc 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -96,6 +96,7 @@ static void do_halving(FractureModifierData *fmd, Object* ob, 
DerivedMesh *dm, D
 static void free_shared_verts(ListBase *lb);
 static void reset_automerge(FractureModifierData *fmd);
 static void do_refresh_automerge(FractureModifierData *fmd);
+static void free_shards(FractureModifierData *fmd);
 
 typedef struct SharedVertGroup {
        struct SharedVertGroup* next, *prev;
@@ -512,11 +513,10 @@ static void free_modifier(FractureModifierData *fmd, bool 
do_free_seq, bool do_f
                        
fmd->visible_mesh_cached->release(fmd->visible_mesh_cached);
                        fmd->visible_mesh_cached = NULL;
                }
-
-               if (fmd->fracture_mode == MOD_FRACTURE_EXTERNAL)
-                       free_shards(fmd);
        }
 
+       free_shards(fmd);
+
        if (fmd->vert_index_map != NULL) {
                BLI_ghash_free(fmd->vert_index_map, NULL, NULL);
                fmd->vert_index_map = NULL;
@@ -567,7 +567,7 @@ static void freeData(ModifierData *md)
 {
        FractureModifierData *fmd = (FractureModifierData *) md;
 
-       freeData_internal(fmd, true, false);
+       freeData_internal(fmd, fmd->fracture_mode == MOD_FRACTURE_DYNAMIC, 
false);
 
        /*force deletion of meshshards here, it slips through improper state 
detection*/
        /*here we know the modifier is about to be deleted completely*/

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to