Fix memory leak caused by node clipboard
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 11 Jul 2017 09:06:36 +0000 (11:06 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 11 Jul 2017 09:06:36 +0000 (11:06 +0200)
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

index 78323557ae26e39249d5ca91ddab4e67b0bb949c..5acfe4a0aa44490d5e3801039ef8347384c3caf9 100644 (file)
@@ -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);