From f50cef95ef33085780c4d4c66f178abfc5ea21b0 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 17 May 2019 10:35:03 +0200 Subject: 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() --- source/blender/makesrna/intern/rna_main_api.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to '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); -- cgit v1.2.3