[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54908] trunk/blender/source/blender: Bug fix #34436
Ton Roosendaal
ton at blender.org
Wed Feb 27 15:25:40 CET 2013
Revision: 54908
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54908
Author: ton
Date: 2013-02-27 14:25:39 +0000 (Wed, 27 Feb 2013)
Log Message:
-----------
Bug fix #34436
Two example files that crashed texture nodes.
- On delete texture nodes, it should free the exec cache (because this cache
stores the node pointer.
- On redo, nodes can exist can exist without typeinfo set. Exec (free) code
was not checking for that. Don't ask me why this happens... tex nodes are weird.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/node.c
trunk/blender/source/blender/nodes/intern/node_exec.c
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2013-02-27 14:19:44 UTC (rev 54907)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2013-02-27 14:25:39 UTC (rev 54908)
@@ -991,6 +991,12 @@
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 @@
break;
case NTREE_TEXTURE:
ntreeTexEndExecTree(ntree->execdata, 1);
+ ntree->execdata = NULL;
break;
}
}
Modified: trunk/blender/source/blender/nodes/intern/node_exec.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_exec.c 2013-02-27 14:19:44 UTC (rev 54907)
+++ trunk/blender/source/blender/nodes/intern/node_exec.c 2013-02-27 14:25:39 UTC (rev 54908)
@@ -248,8 +248,9 @@
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)
More information about the Bf-blender-cvs
mailing list