Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2022-02-18 18:08:43 +0300
committerBastien Montagne <bastien@blender.org>2022-02-18 18:08:43 +0300
commitaab15616908c770c40dcb0f5ba7903ee5ee895a5 (patch)
tree404f49ed1dee3e7cb100a57ea97dba4ddd9db370 /source
parentd9fe565c852135edbe51ec632df593db2579cc9b (diff)
LibOverride: Fix resync sometimes deleting root ID of other liboverrides.
While this should not happen in theory, very bad/broken/dirty files can lead to such situations. So we need to re-ensure valid root IDs after resync (for now, done after each 'library indirect level' pass of resync, this may not be 100% bulletproof though, time will say). Found while investigating Blender studio issues in Snow parkour short.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/lib_override.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 08ff1eb80de..459e64c55f9 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -2160,6 +2160,10 @@ static void lib_override_library_main_resync_on_library_indirect_level(
BLI_ghash_free(id_roots, NULL, MEM_freeN);
+ /* In some fairly rare (and degenerate) cases, some root ID from other liboverrides may have been
+ * freed, and therefore set to NULL. Attempt to fix this as best as possible. */
+ BKE_lib_override_library_main_hierarchy_root_ensure(bmain);
+
if (do_reports_recursive_resync_timing) {
reports->duration.lib_overrides_recursive_resync += PIL_check_seconds_timer() - init_time;
}