Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-12-14 17:20:33 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-12-14 17:29:16 +0300
commite67f7e922cfe6742753944fa1bf4ace358b382a7 (patch)
tree8f3c3925532b1f8e8a7d7883ba3b3460e18e13f5 /source/blender/blenkernel/intern/node.c
parent1e18efa1df1ad999303143156e0742d97d4c86bb (diff)
Attempt to sanitize node tree deletion
Make it explicit when freeing node tree which is owned by other ID or when freeing node tree which is outside of a bmain.
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r--source/blender/blenkernel/intern/node.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 9b06b49a5d9..ea31ad08e61 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1870,8 +1870,24 @@ void ntreeFreeTree(bNodeTree *ntree)
if (ntree->duplilock)
BLI_mutex_free(ntree->duplilock);
- /* if ntree is not part of library, free the libblock data explicitly */
- if (ntree->id.tag & LIB_TAG_NO_MAIN) {
+ if (ntree->id.tag & LIB_TAG_LOCALIZED) {
+ BKE_libblock_free_data(&ntree->id, true);
+ }
+}
+
+void ntreeFreeNestedTree(bNodeTree *ntree)
+{
+ ntreeFreeTree(ntree);
+ BKE_libblock_free_data(&ntree->id, true);
+}
+
+void ntreeFreeLocalTree(bNodeTree *ntree)
+{
+ if (ntree->id.tag & LIB_TAG_LOCALIZED) {
+ ntreeFreeTree(ntree);
+ }
+ else {
+ ntreeFreeTree(ntree);
BKE_libblock_free_data(&ntree->id, true);
}
}