diff --git a/source/blender/blenkernel/intern/lib_id_delete.cc b/source/blender/blenkernel/intern/lib_id_delete.cc index 19577d1519b593e5137a2f9e0b2e6c8929c79ef9..af524e888474d318db5cf50d9a89ead65a976a42 100644 --- a/source/blender/blenkernel/intern/lib_id_delete.cc +++ b/source/blender/blenkernel/intern/lib_id_delete.cc @@ -172,18 +172,25 @@ static int id_free(Main *bmain, void *idv, int flag, const bool use_flag_from_id return flag; } -void BKE_id_free_ex(Main *bmain, void *idv, int flag, const bool use_flag_from_idtag) +void BKE_id_free_ex(Main *bmain, void *idv, const int flag_orig, const bool use_flag_from_idtag) { /* ViewLayer resync needs to be delayed during Scene freeing, since internal relationships * between the Scene's master collection and its view_layers become invalid * (due to remapping). */ - BKE_layer_collection_resync_forbid(); + if (bmain && (flag_orig & LIB_ID_FREE_NO_MAIN) == 0) { + BKE_layer_collection_resync_forbid(); + } - flag = id_free(bmain, idv, flag, use_flag_from_idtag); + int flag_final = id_free(bmain, idv, flag_orig, use_flag_from_idtag); - BKE_layer_collection_resync_allow(); - if (bmain && (flag & LIB_ID_FREE_NO_MAIN) == 0) { - BKE_main_collection_sync_remap(bmain); + if (bmain) { + if ((flag_orig & LIB_ID_FREE_NO_MAIN) == 0) { + BKE_layer_collection_resync_allow(); + } + + if ((flag_final & LIB_ID_FREE_NO_MAIN) == 0) { + BKE_main_collection_sync_remap(bmain); + } } }