[Bf-blender-cvs] [f42543d] soc-2016-layer_manager: Fix crash when deleting any object

Julian Eisel noreply at git.blender.org
Thu Jul 7 02:25:17 CEST 2016


Commit: f42543d2586c09d8d3ef25c0ae673d9145be457f
Author: Julian Eisel
Date:   Thu Jul 7 02:24:29 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rBf42543d2586c09d8d3ef25c0ae673d9145be457f

Fix crash when deleting any object

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

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object_layer.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/space_layers/layers_ops.c

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

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 60fa0b2..07aab06 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -282,7 +282,7 @@ bool BKE_object_modifier_update_subframe(struct Scene *scene, struct Object *ob,
 struct LayerTreeItem *BKE_objectlayer_add(struct LayerTree *tree, struct LayerTreeItem *parent, const char *name);
 void BKE_objectlayer_free(struct LayerTreeItem *litem);
 void BKE_objectlayer_base_assign(struct Base *base, struct LayerTreeItem *litem, const bool has_reserved);
-void BKE_objectlayer_base_unassign(struct Base *base, struct LayerTreeItem *litem);
+void BKE_objectlayer_base_unassign(struct Base *base);
 void BKE_objectlayer_bases_unassign_all(struct LayerTreeItem *litem, const bool unset_base_layer);
 void BKE_objectlayer_base_entries_reserve(struct LayerTreeItem *litem, const unsigned int nentries_reserve);
 
diff --git a/source/blender/blenkernel/intern/object_layer.c b/source/blender/blenkernel/intern/object_layer.c
index 5ca5500..9a2f1d5 100644
--- a/source/blender/blenkernel/intern/object_layer.c
+++ b/source/blender/blenkernel/intern/object_layer.c
@@ -80,9 +80,9 @@ void BKE_objectlayer_base_assign(Base *base, LayerTreeItem *litem, const bool ha
 /**
  * Un-assign \a base from object layer \a litem.
  */
-void BKE_objectlayer_base_unassign(Base *base, LayerTreeItem *litem)
+void BKE_objectlayer_base_unassign(Base *base)
 {
-	LayerTypeObject *oblayer = (LayerTypeObject *)litem;
+	LayerTypeObject *oblayer = (LayerTypeObject *)base->layer;
 
 	bool has_base = false;
 	for (int i = 0; i < oblayer->tot_bases; i++) {
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index d0b08d8..91288bb 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1153,7 +1153,9 @@ void BKE_scene_base_unlink(Scene *sce, Base *base)
 	/* remove rigid body object from world before removing object */
 	if (base->object->rigidbody_object)
 		BKE_rigidbody_remove_object(sce, base->object);
-	
+	if (base->layer)
+		BKE_objectlayer_base_unassign(base);
+
 	BLI_remlink(&sce->base, base);
 	if (sce->basact == base)
 		sce->basact = NULL;
diff --git a/source/blender/editors/space_layers/layers_ops.c b/source/blender/editors/space_layers/layers_ops.c
index 691aa7c..c0145cf 100644
--- a/source/blender/editors/space_layers/layers_ops.c
+++ b/source/blender/editors/space_layers/layers_ops.c
@@ -669,7 +669,7 @@ static int layer_objects_assign_invoke(bContext *C, wmOperator *UNUSED(op), cons
 	for (Base *base = scene->base.first; base; base = base->next) {
 		if (base->flag & SELECT) {
 			if (base->layer) {
-				BKE_objectlayer_base_unassign(base, base->layer);
+				BKE_objectlayer_base_unassign(base);
 			}
 			BKE_objectlayer_base_assign(base, active, false);
 		}




More information about the Bf-blender-cvs mailing list