Report an error when trying to remove non-in-main datablock
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 17 May 2019 08:35:03 +0000 (10:35 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 17 May 2019 08:38:16 +0000 (10:38 +0200)
After recent dependency graph API changes it became easy to violate
ownership design (since its changed) and request removal of out-of-main
temporary mesh. This confuses Blender and can cause crashes/locks.

Fixes T64731: Blender freezes after assigning result of object.to_mesh()

source/blender/makesrna/intern/rna_main_api.c

index f6fee25..abcaccd 100644 (file)
@@ -125,6 +125,14 @@ static void rna_Main_ID_remove(Main *bmain,
                                bool do_ui_user)
 {
   ID *id = id_ptr->data;
+  if (id->tag & LIB_TAG_NO_MAIN) {
+    BKE_reportf(reports,
+                RPT_ERROR,
+                "%s '%s' is outside of main database and can not be removed from it",
+                BKE_idcode_to_name(GS(id->name)),
+                id->name + 2);
+    return;
+  }
   if (do_unlink) {
     BKE_id_delete(bmain, id);
     RNA_POINTER_INVALIDATE(id_ptr);