From f9ffa18171c59340cbb5d6280450a16c06415384 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 4 Mar 2019 16:44:33 +0100 Subject: Fix T62175: Crash on Undo. Again nodetree broken code... as usual... --- source/blender/blenkernel/intern/node.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 4585c343d95..4eb8fa26b1e 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -716,10 +716,10 @@ bNodeSocket *nodeInsertStaticSocket(bNodeTree *ntree, bNode *node, int in_out, i return sock; } -static void node_socket_free(bNodeTree *UNUSED(ntree), bNodeSocket *sock, bNode *UNUSED(node)) +static void node_socket_free(bNodeTree *UNUSED(ntree), bNodeSocket *sock, bNode *UNUSED(node), const bool do_id_user) { if (sock->prop) { - IDP_FreeProperty(sock->prop); + IDP_FreeProperty_ex(sock->prop, do_id_user); MEM_freeN(sock->prop); } @@ -742,7 +742,7 @@ void nodeRemoveSocket(bNodeTree *ntree, bNode *node, bNodeSocket *sock) BLI_remlink(&node->inputs, sock); BLI_remlink(&node->outputs, sock); - node_socket_free(ntree, sock, node); + node_socket_free(ntree, sock, node, true); MEM_freeN(sock); node->update |= NODE_UPDATE; @@ -762,14 +762,14 @@ void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node) for (sock = node->inputs.first; sock; sock = sock_next) { sock_next = sock->next; - node_socket_free(ntree, sock, node); + node_socket_free(ntree, sock, node, true); MEM_freeN(sock); } BLI_listbase_clear(&node->inputs); for (sock = node->outputs.first; sock; sock = sock_next) { sock_next = sock->next; - node_socket_free(ntree, sock, node); + node_socket_free(ntree, sock, node, true); MEM_freeN(sock); } BLI_listbase_clear(&node->outputs); @@ -1737,12 +1737,14 @@ static void node_free_node_ex( for (sock = node->inputs.first; sock; sock = nextsock) { nextsock = sock->next; - node_socket_free(ntree, sock, node); + /* Remember, no ID user refcount management here! */ + node_socket_free(ntree, sock, node, false); MEM_freeN(sock); } for (sock = node->outputs.first; sock; sock = nextsock) { nextsock = sock->next; - node_socket_free(ntree, sock, node); + /* Remember, no ID user refcount management here! */ + node_socket_free(ntree, sock, node, false); MEM_freeN(sock); } -- cgit v1.2.3