From d5d7d453a5ce506e2d01e0d329447168135c4cb4 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 11 Jul 2017 11:06:36 +0200 Subject: Fix memory leak caused by node clipboard The issue was caused by combination of following factors: - Clipboard cleanup function will pass node tree as NULL to node free function. This is fine on it's own, we don't have tree in clipboard. - Node free function will call node storage cleanup only when there is a non-NULL node tree. This is somewhat weird, because storage cleanup does not take node tree as argument. So the solution here: move node storage cleanup outside of check that node tree is not NULL. --- source/blender/blenkernel/intern/node.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'source/blender/blenkernel/intern/node.c') diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 78323557ae2..5acfe4a0aa4 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1700,11 +1700,12 @@ static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool remove_animdat ntreeTexEndExecTree(ntree->execdata); ntree->execdata = NULL; } - - if (node->typeinfo->freefunc) - node->typeinfo->freefunc(node); } - + + if (node->typeinfo->freefunc) { + node->typeinfo->freefunc(node); + } + for (sock = node->inputs.first; sock; sock = nextsock) { nextsock = sock->next; node_socket_free(ntree, sock, node); -- cgit v1.2.3