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()
This commit is contained in:
Sergey Sharybin 2019-05-17 10:35:03 +02:00
parent 32b5f24c2a
commit f50cef95ef
1 changed files with 8 additions and 0 deletions

View 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);