Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2019-03-04 18:44:33 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2019-03-04 18:44:33 +0300
commitf9ffa18171c59340cbb5d6280450a16c06415384 (patch)
tree81ebc6db4fbb3e4e270ac895a1dd46fee39cdbd7 /source
parentc2f7d4efc3f0fa421dd0ced473ed3024c9e0f907 (diff)
Fix T62175: Crash on Undo.
Again nodetree broken code... as usual...
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/node.c16
1 files changed, 9 insertions, 7 deletions
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);
}