diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-12-14 17:20:33 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-12-14 17:29:16 +0300 |
commit | e67f7e922cfe6742753944fa1bf4ace358b382a7 (patch) | |
tree | 8f3c3925532b1f8e8a7d7883ba3b3460e18e13f5 /source/blender/blenkernel/intern/node.c | |
parent | 1e18efa1df1ad999303143156e0742d97d4c86bb (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.c | 20 |
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); } } |