[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54110] trunk/blender/source/blender: Fix [#34005] blender will close immediately in debug mode on deleting objects

Sergej Reich sergej.reich at googlemail.com
Sat Jan 26 18:38:48 CET 2013


Revision: 54110
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54110
Author:   sergof
Date:     2013-01-26 17:38:45 +0000 (Sat, 26 Jan 2013)
Log Message:
-----------
Fix [#34005] blender will close immediately in debug mode on deleting objects

Was silly mistake from rigidbody merge, base was used after it's been
freed.

Now don't free base in BKE_scene_base_remove() and rename it to
BKE_scene_base_unlink().

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h	2013-01-26 17:19:21 UTC (rev 54109)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h	2013-01-26 17:38:45 UTC (rev 54110)
@@ -72,7 +72,7 @@
 /* base functions */
 struct Base *BKE_scene_base_find(struct Scene *scene, struct Object *ob);
 struct Base *BKE_scene_base_add(struct Scene *sce, struct Object *ob);
-void         BKE_scene_base_remove(struct Scene *sce, struct Base *base);
+void         BKE_scene_base_unlink(struct Scene *sce, struct Base *base);
 void         BKE_scene_base_deselect_all(struct Scene *sce);
 void         BKE_scene_base_select(struct Scene *sce, struct Base *selbase);
 int          BKE_scene_base_iter_next(struct Scene **scene, int val, struct Base **base, struct Object **ob);

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2013-01-26 17:19:21 UTC (rev 54109)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2013-01-26 17:38:45 UTC (rev 54110)
@@ -941,7 +941,7 @@
 	return b;
 }
 
-void BKE_scene_base_remove(Scene *sce, Base *base)
+void BKE_scene_base_unlink(Scene *sce, Base *base)
 {
 	/* remove rigid body constraint from world before removing object */
 	if (base->object->rigidbody_constraint)
@@ -951,7 +951,6 @@
 		BKE_rigidbody_remove_object(sce, base->object);
 	
 	BLI_remlink(&sce->base, base);
-	MEM_freeN(base);
 }
 
 void BKE_scene_base_deselect_all(Scene *sce)

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2013-01-26 17:19:21 UTC (rev 54109)
+++ trunk/blender/source/blender/editors/object/object_add.c	2013-01-26 17:38:45 UTC (rev 54110)
@@ -941,10 +941,11 @@
 void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base)
 {
 	DAG_id_type_tag(bmain, ID_OB);
-	BKE_scene_base_remove(scene, base);
+	BKE_scene_base_unlink(scene, base);
 	object_delete_check_glsl_update(base->object);
 	BKE_libblock_free_us(&bmain->object, base->object);
 	if (scene->basact == base) scene->basact = NULL;
+	MEM_freeN(base);
 }
 
 static int object_delete_exec(bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2013-01-26 17:19:21 UTC (rev 54109)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2013-01-26 17:38:45 UTC (rev 54110)
@@ -354,7 +354,8 @@
 		
 		/* remove base, leave user count of object, it gets linked in BKE_object_make_proxy */
 		if (gob == NULL) {
-			BKE_scene_base_remove(scene, oldbase);
+			BKE_scene_base_unlink(scene, oldbase);
+			MEM_freeN(oldbase);
 		}
 		
 		BKE_object_make_proxy(newob, ob, gob);

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-01-26 17:19:21 UTC (rev 54109)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-01-26 17:38:45 UTC (rev 54110)
@@ -406,7 +406,8 @@
 		scene->basact = NULL;
 	}
 
-	BKE_scene_base_remove(scene, base);
+	BKE_scene_base_unlink(scene, base);
+	MEM_freeN(base);
 
 	ob->id.us--;
 




More information about the Bf-blender-cvs mailing list