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