From a0957ceab2635676b057b69d0a241fe895005466 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Tue, 12 Apr 2022 18:16:46 +0200 Subject: Fix T97069: Null collection object during layercollection resync when relinking. We better handle NULL object pointers before doing layer collections resync, otherwise said resync process has to deal with those NULL pointers. By the look of it this mistake has been there since the origin of the remapping/relinking code. Also for safety (and optimization), do not perform layer collection resync from `libblock_remap_data_postprocess_object_update` when `libblock_remap_data_postprocess_collection_update` is called immediately afterwards. Also added same 'skip on NULL collection object pointer' check to `layer_collection_local_sync` as the one in `layer_collection_objects_sync`, since it's fairly hard to always guaranty there is no such NULL pointer when calling that code. --- source/blender/blenkernel/intern/layer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/layer.c') diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 1cc1839d2d0..f0ccd305690 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -1658,7 +1658,10 @@ static void layer_collection_local_sync(ViewLayer *view_layer, if (visible) { LISTBASE_FOREACH (CollectionObject *, cob, &layer_collection->collection->gobject) { - BLI_assert(cob->ob); + if (cob->ob == NULL) { + continue; + } + Base *base = BKE_view_layer_base_find(view_layer, cob->ob); base->local_collections_bits |= local_collections_uuid; } -- cgit v1.2.3