[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