diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 7 | ||||
-rw-r--r-- | source/blender/nodes/intern/node_exec.c | 5 |
2 files changed, 10 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 86fe47268d6..3dbaab008f8 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -991,6 +991,12 @@ void nodeFreeNode(bNodeTree *ntree, bNode *node) if (treetype->free_node_cache) treetype->free_node_cache(ntree, node); + + /* texture node has bad habit of keeping exec data around */ + if (ntree->type == NTREE_TEXTURE && ntree->execdata) { + ntreeTexEndExecTree(ntree->execdata, 1); + ntree->execdata = NULL; + } } /* since it is called while free database, node->id is undefined */ @@ -1040,6 +1046,7 @@ void ntreeFreeTree_ex(bNodeTree *ntree, const short do_id_user) break; case NTREE_TEXTURE: ntreeTexEndExecTree(ntree->execdata, 1); + ntree->execdata = NULL; break; } } diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c index 7a8b8c940c9..8cf7cc7a1ea 100644 --- a/source/blender/nodes/intern/node_exec.c +++ b/source/blender/nodes/intern/node_exec.c @@ -248,8 +248,9 @@ void ntree_exec_end(bNodeTreeExec *exec) MEM_freeN(exec->stack); for (n=0, nodeexec= exec->nodeexec; n < exec->totnodes; ++n, ++nodeexec) { - if (nodeexec->node->typeinfo->freeexecfunc) - nodeexec->node->typeinfo->freeexecfunc(nodeexec->node, nodeexec->data); + if (nodeexec->node->typeinfo) + if (nodeexec->node->typeinfo->freeexecfunc) + nodeexec->node->typeinfo->freeexecfunc(nodeexec->node, nodeexec->data); } if (exec->nodeexec) |