[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