From b4a4004fb15fd7952bcd8348f299f6103dea35fb Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 22 Apr 2022 18:27:45 +0200 Subject: [PATCH] Fix memory leak in cryptomatte Since cbf033c0551 the `matte_id` will be allocated in the node storage for the forward compatibility purposes. However, this field was never freed, leading to memory leak. Causes annoying popup on macOS when running Cycles tests, for example render_passes_cryptomatte_asset.blend Differential Revision: https://developer.blender.org/D14728 --- .../nodes/composite/nodes/node_composite_cryptomatte.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc index 67d861aad9f..9193f91087a 100644 --- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc +++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc @@ -21,6 +21,8 @@ #include "BKE_library.h" #include "BKE_main.h" +#include "MEM_guardedalloc.h" + #include /* -------------------------------------------------------------------- */ @@ -249,6 +251,7 @@ static void node_free_cryptomatte(bNode *node) NodeCryptomatte *nc = static_cast(node->storage); if (nc) { + MEM_SAFE_FREE(nc->matte_id); BLI_freelistN(&nc->runtime.layers); BLI_freelistN(&nc->entries); MEM_freeN(nc); @@ -264,6 +267,7 @@ static void node_copy_cryptomatte(bNodeTree *UNUSED(dest_ntree), BLI_duplicatelist(&dest_nc->entries, &src_nc->entries); BLI_listbase_clear(&dest_nc->runtime.layers); + dest_nc->matte_id = static_cast(MEM_dupallocN(src_nc->matte_id)); dest_node->storage = dest_nc; }