[Bf-blender-cvs] [aab15616908] master: LibOverride: Fix resync sometimes deleting root ID of other liboverrides.

Bastien Montagne noreply at git.blender.org
Fri Feb 18 16:10:49 CET 2022


Commit: aab15616908c770c40dcb0f5ba7903ee5ee895a5
Author: Bastien Montagne
Date:   Fri Feb 18 16:08:43 2022 +0100
Branches: master
https://developer.blender.org/rBaab15616908c770c40dcb0f5ba7903ee5ee895a5

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.

===================================================================

M	source/blender/blenkernel/intern/lib_override.c

===================================================================

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;
   }



More information about the Bf-blender-cvs mailing list