[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35128] trunk/blender/source/blender/ blenkernel/intern/node.c: Fixed memory leak in group nodes.
Lukas Toenne
lukas.toenne at googlemail.com
Thu Feb 24 16:48:09 CET 2011
Revision: 35128
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35128
Author: lukastoenne
Date: 2011-02-24 15:48:09 +0000 (Thu, 24 Feb 2011)
Log Message:
-----------
Fixed memory leak in group nodes. Only buffers from exposed sockets should remain after group execution.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/node.c
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2011-02-24 15:31:38 UTC (rev 35127)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2011-02-24 15:48:09 UTC (rev 35128)
@@ -1983,6 +1983,33 @@
node->typeinfo->execfunc(data, node, nsin, nsout);
}
}
+
+ /* free internal buffers */
+ if (ntree->type==NTREE_COMPOSIT) {
+ bNodeSocket *sock;
+ bNodeStack *ns;
+ for (sock=ntree->outputs.first; sock; sock=sock->next) {
+ /* use the hasoutput flag to tag external sockets */
+ if (sock->stack_type==SOCK_STACK_LOCAL) {
+ ns= get_socket_stack(stack, sock, in);
+ ns->hasoutput = 0;
+ }
+ }
+ /* now free all stacks that are not used from outside */
+ for (node=ntree->nodes.first; node; node=node->next) {
+ for (sock=node->outputs.first; sock; sock=sock->next) {
+ if (sock->stack_type==SOCK_STACK_LOCAL ) {
+ ns= get_socket_stack(stack, sock, in);
+ if (ns->hasoutput!=0 && ns->data) {
+ free_compbuf(ns->data);
+ ns->data = NULL;
+ /* reset the flag */
+ ns->hasoutput = 1;
+ }
+ }
+ }
+ }
+ }
}
static int set_stack_indexes_default(bNode *node, int index)
More information about the Bf-blender-cvs
mailing list