[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