Commit: 514f4e8b47bf4c3d57cf74780cb3b8178e8f1a19
Author: Bastien Montagne
Date:   Wed Oct 19 09:18:47 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB514f4e8b47bf4c3d57cf74780cb3b8178e8f1a19

Fix T101903: Crash when deleting library in some cases.

Remapping in batch deletion could end up calling viewlayer resync code
on partially invalid BMain (some IDs still in Main using IDs removed
from Main).

Think this code can actually be further optimized, but this fix should
be safe enough for 3.3 (and potentially 2.93).

Thanks to Jeroen (@jbakker) for the initial investigation.

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

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

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

diff --git a/source/blender/blenkernel/intern/lib_id_delete.c 
b/source/blender/blenkernel/intern/lib_id_delete.c
index 8d5699d7d49..78e800e1fdb 100644
--- a/source/blender/blenkernel/intern/lib_id_delete.c
+++ b/source/blender/blenkernel/intern/lib_id_delete.c
@@ -23,6 +23,7 @@
 #include "BKE_idprop.h"
 #include "BKE_idtype.h"
 #include "BKE_key.h"
+#include "BKE_layer.h"
 #include "BKE_lib_id.h"
 #include "BKE_lib_override.h"
 #include "BKE_lib_remap.h"
@@ -217,6 +218,7 @@ static size_t id_delete(Main *bmain, const bool 
do_tagged_deletion)
 
   BKE_main_lock(bmain);
   if (do_tagged_deletion) {
+    BKE_layer_collection_resync_forbid();
     /* Main idea of batch deletion is to remove all IDs to be deleted from 
Main database.
      * This means that we won't have to loop over all deleted IDs to remove 
usages
      * of other deleted IDs.
@@ -279,6 +281,9 @@ static size_t id_delete(Main *bmain, const bool 
do_tagged_deletion)
       }
     }
 
+    BKE_layer_collection_resync_allow();
+    BKE_main_collection_sync_remap(bmain);
+
     /* Now we can safely mark that ID as not being in Main database anymore. */
     /* NOTE: This needs to be done in a separate loop than above, otherwise 
some usercounts of
      * deleted IDs may not be properly decreased by the remappings (since 
`NO_MAIN` ID usercounts

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to