diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-12-19 01:36:57 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-12-21 12:49:10 +0300 |
commit | 36184f739264387a932c21424964d01c33d793b0 (patch) | |
tree | 4f114e0e3ff72897c9cc783de8adef04ee3e31ac /source | |
parent | 8cbadde1a52f2550bd14bdca222a88cb1ec26547 (diff) |
Fix T57816: Crash when deleting recently orphaned collection
We were never removing the parent collection from a collection upon removal
of the parent.
Reviewers: mont29
Differential Revision: https://developer.blender.org/D4099
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/collection.c | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/library_query.c | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index 33287d5a2f8..a3782deecad 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -683,8 +683,9 @@ static void collection_missing_parents_remove(Collection *collection) { for (CollectionParent *parent = collection->parents.first, *parent_next; parent != NULL; parent = parent_next) { parent_next = parent->next; - - if (!collection_find_child(parent->collection, collection)) { + if ((parent->collection == NULL) || + !collection_find_child(parent->collection, collection)) + { BLI_freelinkN(&collection->parents, parent); } } diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c index 9428e1508a4..ab50cf8b0a8 100644 --- a/source/blender/blenkernel/intern/library_query.c +++ b/source/blender/blenkernel/intern/library_query.c @@ -747,6 +747,9 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call for (CollectionChild *child = collection->children.first; child; child = child->next) { CALLBACK_INVOKE(child->collection, IDWALK_CB_USER); } + for (CollectionParent *parent = collection->parents.first; parent; parent = parent->next) { + CALLBACK_INVOKE(parent->collection, IDWALK_CB_NOP); + } break; } |