From e160a4ceca4c288b1a4c38626a0f03051d9a480a Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Fri, 1 Sep 2023 15:30:10 -0400 Subject: [PATCH] Fix: Memory leak with node interface forward compatibility The runtime pointers are allocated when reading sockets, they have to be freed when the legacy sockets are freed. --- source/blender/blenloader/intern/versioning_400.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index 48f5402c18c..3efe97e3103 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -992,8 +992,16 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) FOREACH_NODETREE_BEGIN (bmain, ntree, id) { /* Clear legacy sockets after conversion. * Internal data pointers have been moved or freed already. */ - BLI_freelistN(&ntree->inputs_legacy); - BLI_freelistN(&ntree->outputs_legacy); + LISTBASE_FOREACH_MUTABLE (bNodeSocket *, legacy_socket, &ntree->inputs_legacy) { + MEM_delete(legacy_socket->runtime); + MEM_freeN(legacy_socket); + } + LISTBASE_FOREACH_MUTABLE (bNodeSocket *, legacy_socket, &ntree->outputs_legacy) { + MEM_delete(legacy_socket->runtime); + MEM_freeN(legacy_socket); + } + BLI_listbase_clear(&ntree->inputs_legacy); + BLI_listbase_clear(&ntree->outputs_legacy); } FOREACH_NODETREE_END; }