[Bf-blender-cvs] [3daa641d7f5] master: Fix T52092: Crash un-grouping nodes

Campbell Barton noreply at git.blender.org
Wed Jul 19 06:22:02 CEST 2017


Commit: 3daa641d7f56109741ebe59416875a0162ac19a0
Author: Campbell Barton
Date:   Wed Jul 19 14:32:31 2017 +1000
Branches: master
https://developer.blender.org/rB3daa641d7f56109741ebe59416875a0162ac19a0

Fix T52092: Crash un-grouping nodes

===================================================================

M	source/blender/editors/space_node/node_group.c

===================================================================

diff --git a/source/blender/editors/space_node/node_group.c b/source/blender/editors/space_node/node_group.c
index 914f8ffbe10..9d750bfe348 100644
--- a/source/blender/editors/space_node/node_group.c
+++ b/source/blender/editors/space_node/node_group.c
@@ -37,6 +37,7 @@
 #include "DNA_anim_types.h"
 
 #include "BLI_listbase.h"
+#include "BLI_linklist.h"
 #include "BLI_math.h"
 
 #include "BLT_translation.h"
@@ -186,6 +187,7 @@ static int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
 	bNode *node, *nextnode;
 	bNodeTree *ngroup, *wgroup;
 	ListBase anim_basepaths = {NULL, NULL};
+	LinkNode *nodes_delayed_free = NULL;
 	
 	ngroup = (bNodeTree *)gnode->id;
 	
@@ -208,8 +210,8 @@ static int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
 		 * This also removes remaining links to and from interface nodes.
 		 */
 		if (ELEM(node->type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT)) {
-			nodeFreeNode(wgroup, node);
-			continue;
+			/* We must delay removal since sockets will reference this node. see: T52092 */
+			BLI_linklist_prepend(&nodes_delayed_free, node);
 		}
 		
 		/* keep track of this node's RNA "base" path (the part of the path identifying the node) 
@@ -336,6 +338,11 @@ static int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
 		}
 	}
 	
+	while (nodes_delayed_free) {
+		node = BLI_linklist_pop(&nodes_delayed_free);
+		nodeFreeNode(ntree, node);
+	}
+
 	/* delete the group instance */
 	nodeFreeNode(ntree, gnode);




More information about the Bf-blender-cvs mailing list