Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorSergej Reich <sergej.reich@googlemail.com>2013-01-26 21:38:45 +0400
committerSergej Reich <sergej.reich@googlemail.com>2013-01-26 21:38:45 +0400
commitc84383301c5a2582e95259a7e4468a23a3566401 (patch)
tree1dd1df9d9cfb2cf5714f5ed5762f2cb5e2d56160 /source
parent7e49a39acda5cdc86ce87470f7dc10cd80f1eba7 (diff)
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().
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_scene.h2
-rw-r--r--source/blender/blenkernel/intern/scene.c3
-rw-r--r--source/blender/editors/object/object_add.c3
-rw-r--r--source/blender/editors/object/object_relations.c3
-rw-r--r--source/blender/makesrna/intern/rna_scene.c3
5 files changed, 8 insertions, 6 deletions
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 2ac32a3f651..9bf0991272a 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -72,7 +72,7 @@ struct Scene *BKE_scene_add(struct Main *bmain, const char *name);
/* 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);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index fa3dac67a7f..9e8cf985f71 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -941,7 +941,7 @@ Base *BKE_scene_base_add(Scene *sce, Object *ob)
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 @@ void BKE_scene_base_remove(Scene *sce, Base *base)
BKE_rigidbody_remove_object(sce, base->object);
BLI_remlink(&sce->base, base);
- MEM_freeN(base);
}
void BKE_scene_base_deselect_all(Scene *sce)
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 9c829a06cd2..8457b278c6c 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -941,10 +941,11 @@ static void object_delete_check_glsl_update(Object *ob)
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)
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index 68d7dcafd9c..9749494bc66 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -354,7 +354,8 @@ static int make_proxy_exec(bContext *C, wmOperator *op)
/* 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);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 705ac09382d..7304f7c9a49 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -406,7 +406,8 @@ static void rna_Scene_object_unlink(Scene *scene, ReportList *reports, Object *o
scene->basact = NULL;
}
- BKE_scene_base_remove(scene, base);
+ BKE_scene_base_unlink(scene, base);
+ MEM_freeN(base);
ob->id.us--;