[Bf-blender-cvs] [b26e1ad] fracture_modifier: fix for occasional crashes with dynamic fracture while freeing the modifier
Martin Felke
noreply at git.blender.org
Thu Mar 31 13:19:28 CEST 2016
Commit: b26e1ad0f185697a4446563e005e7919d9595f29
Author: Martin Felke
Date: Thu Mar 31 13:19:14 2016 +0200
Branches: fracture_modifier
https://developer.blender.org/rBb26e1ad0f185697a4446563e005e7919d9595f29
fix for occasional crashes with dynamic fracture while freeing the modifier
crash happened with scene objects which had a freed rigidbody world but didnt set the pointer to NULL.
===================================================================
M source/blender/blenkernel/intern/scene.c
M source/blender/modifiers/intern/MOD_fracture.c
===================================================================
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 3e086c7..371dd2a 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -395,7 +395,12 @@ void BKE_scene_free(Scene *sce)
BKE_keyingsets_free(&sce->keyingsets);
if (sce->rigidbody_world)
+ {
BKE_rigidbody_free_world(sce->rigidbody_world);
+ /* might happen that this is used in Fracture Modifier objects still,
+ * a scene with a freed, but not NULLed rigidbodyworld, so null it here.*/
+ sce->rigidbody_world = NULL;
+ }
if (sce->r.avicodecdata) {
free_avicodecdata(sce->r.avicodecdata);
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 7292d33..6eb5ca6 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -344,7 +344,7 @@ static void free_simulation(FractureModifierData *fmd, bool do_free_seq, bool do
while (fmd->meshIsland_sequence.first) {
msq = fmd->meshIsland_sequence.first;
BLI_remlink(&fmd->meshIsland_sequence, msq);
- free_meshislands(fmd, &msq->meshIslands, do_free_rigidbody && (msq == fmd->current_mi_entry));
+ free_meshislands(fmd, &msq->meshIslands, do_free_rigidbody);
MEM_freeN(msq);
msq = NULL;
}
@@ -412,15 +412,6 @@ static void free_shards(FractureModifierData *fmd)
static void free_modifier(FractureModifierData *fmd, bool do_free_seq)
{
- /*if (fmd->fracture_mode != MOD_FRACTURE_DYNAMIC)
- {
- free_simulation(fmd, false, false);
- }
- else if (!do_free_seq)
- {
- free_simulation(fmd, true, true);
- }*/
-
free_simulation(fmd, do_free_seq, fmd->fracture_mode == MOD_FRACTURE_DYNAMIC);
if (fmd->material_index_map)
More information about the Bf-blender-cvs
mailing list