[Bf-blender-cvs] [09af91e096] blender2.8: Fix crashes on outliner (fixup for rB2a16a4ee)
Dalai Felinto
noreply at git.blender.org
Thu Feb 9 11:24:10 CET 2017
Commit: 09af91e0966afadd986a5a480e626698b2029826
Author: Dalai Felinto
Date: Thu Feb 9 11:22:56 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB09af91e0966afadd986a5a480e626698b2029826
Fix crashes on outliner (fixup for rB2a16a4ee)
FOREACH_SCENE_OBJECT was wrong (skipping an object), but rB2a16a4ee made it crash. Things should be better now.
===================================================================
M source/blender/blenkernel/intern/collection.c
===================================================================
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index efc98281a5..289586153e 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -385,40 +385,36 @@ void BKE_scene_objects_Iterator_begin(Iterator *iter, void *data_in)
SceneCollection *sc = data->scene_collection_iter.current;
iter->current = sc->objects.first;
+ iter->valid = true;
if (iter->current == NULL) {
BKE_scene_objects_Iterator_next(iter);
}
- iter->valid = true;
}
/**
- * Gets the next unique object
+ * Gets the first unique object in the sequence
*/
-static LinkData *object_base_next(GSet *gs, LinkData *link)
+static LinkData *object_base_unique(GSet *gs, LinkData *link)
{
if (link == NULL) {
return NULL;
}
- LinkData *link_next = link->next;
- if (link_next) {
- Object *ob = link_next->data;
- if (!BLI_gset_haskey(gs, ob)) {
- BLI_gset_add(gs, ob);
- return link_next;
- }
- else {
- return object_base_next(gs, link_next);
- }
+ Object *ob = link->data;
+ if (!BLI_gset_haskey(gs, ob)) {
+ BLI_gset_add(gs, ob);
+ return link;
+ }
+ else {
+ return object_base_unique(gs, link->next);
}
- return NULL;
}
void BKE_scene_objects_Iterator_next(Iterator *iter)
{
SceneObjectsIteratorData *data = iter->data;
- LinkData *link = object_base_next(data->visited, data->link);
+ LinkData *link = data->link ? object_base_unique(data->visited, data->link->next) : NULL;
if (link) {
data->link = link;
@@ -431,7 +427,7 @@ void BKE_scene_objects_Iterator_next(Iterator *iter)
do {
sc = data->scene_collection_iter.current;
/* get the first unique object of this collection */
- LinkData *new_link = object_base_next(data->visited, sc->objects.first);
+ LinkData *new_link = object_base_unique(data->visited, sc->objects.first);
if (new_link) {
data->link = new_link;
iter->current = data->link->data;
More information about the Bf-blender-cvs
mailing list