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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to