diff options
author | Bastien Montagne <bastien@blender.org> | 2022-02-18 18:08:43 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2022-02-18 18:08:43 +0300 |
commit | aab15616908c770c40dcb0f5ba7903ee5ee895a5 (patch) | |
tree | 404f49ed1dee3e7cb100a57ea97dba4ddd9db370 /source/blender/blenkernel/intern/lib_override.c | |
parent | d9fe565c852135edbe51ec632df593db2579cc9b (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/blender/blenkernel/intern/lib_override.c')
-rw-r--r-- | source/blender/blenkernel/intern/lib_override.c | 4 |
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; } |