[Bf-blender-cvs] [f50cef95ef3] master: Report an error when trying to remove non-in-main datablock

Sergey Sharybin noreply at git.blender.org
Fri May 17 10:39:19 CEST 2019


Commit: f50cef95ef33085780c4d4c66f178abfc5ea21b0
Author: Sergey Sharybin
Date:   Fri May 17 10:35:03 2019 +0200
Branches: master
https://developer.blender.org/rBf50cef95ef33085780c4d4c66f178abfc5ea21b0

Report an error when trying to remove non-in-main datablock

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()

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

M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index f6fee2580b8..abcaccd7b6b 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -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);



More information about the Bf-blender-cvs mailing list