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);
                }

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

Reply via email to