[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40011] trunk/blender/source/blender: Fix for crash when duplicating image or render layer nodes.

Lukas Toenne lukas.toenne at googlemail.com
Wed Sep 7 14:46:30 CEST 2011


Revision: 40011
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40011
Author:   lukastoenne
Date:     2011-09-07 12:46:30 +0000 (Wed, 07 Sep 2011)
Log Message:
-----------
Fix for crash when duplicating image or render layer nodes.

These nodes use cached buffers (in sock->cache), which need to be cleared when duplicating the node, otherwise the buffer will be freed twice.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/nodes/composite/node_composite_tree.c

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2011-09-07 12:16:20 UTC (rev 40010)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2011-09-07 12:46:30 UTC (rev 40011)
@@ -398,6 +398,11 @@
 		sock->stack_index= 0;
 		
 		sock->default_value = (oldsock->default_value ? MEM_dupallocN(oldsock->default_value) : NULL);
+		
+		/* XXX some compositor node (e.g. image, render layers) still store
+		 * some persistent buffer data here, need to clear this to avoid dangling pointers.
+		 */
+		sock->cache = NULL;
 	}
 	
 	BLI_duplicatelist(&nnode->outputs, &node->outputs);
@@ -407,6 +412,11 @@
 		sock->stack_index= 0;
 		
 		sock->default_value = (oldsock->default_value ? MEM_dupallocN(oldsock->default_value) : NULL);
+		
+		/* XXX some compositor node (e.g. image, render layers) still store
+		 * some persistent buffer data here, need to clear this to avoid dangling pointers.
+		 */
+		sock->cache = NULL;
 	}
 	
 	/* don't increase node->id users, freenode doesn't decrement either */

Modified: trunk/blender/source/blender/nodes/composite/node_composite_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/node_composite_tree.c	2011-09-07 12:16:20 UTC (rev 40010)
+++ trunk/blender/source/blender/nodes/composite/node_composite_tree.c	2011-09-07 12:46:30 UTC (rev 40011)
@@ -362,7 +362,7 @@
 		int a;
 		node = nodeexec->node;
 		
-		node_get_stack(node, thd->stack, nsin, nsout);
+		node_get_stack(node, exec->stack, nsin, nsout);
 		
 		/* test the outputs */
 		/* skip value-only nodes (should be in type!) */
@@ -428,7 +428,7 @@
 			node = nodeexec->node;
 			if(node->need_exec==0 && node_only_value(node)) {
 				if(node->typeinfo->execfunc) {
-					node_get_stack(node, thd->stack, nsin, nsout);
+					node_get_stack(node, exec->stack, nsin, nsout);
 					node->typeinfo->execfunc(thd->rd, node, nsin, nsout);
 				}
 			}




More information about the Bf-blender-cvs mailing list