From 3dbbe7246aeaa2d862ab653a958fff34e30bc020 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Fri, 12 Jan 2024 17:36:46 -0300 Subject: [PATCH] Fix: leak in edit mesh snap cache when changing shapekeys Do not use `BMEditMesh` as key as it is freed when changing shape-keys. --- source/blender/editors/transform/transform_snap_object.hh | 2 +- .../editors/transform/transform_snap_object_editmesh.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/transform/transform_snap_object.hh b/source/blender/editors/transform/transform_snap_object.hh index 333f82a3880..e5da3a13155 100644 --- a/source/blender/editors/transform/transform_snap_object.hh +++ b/source/blender/editors/transform/transform_snap_object.hh @@ -23,7 +23,7 @@ struct SnapObjectContext { struct SnapCache { virtual ~SnapCache(){}; }; - blender::Map> editmesh_caches; + blender::Map> editmesh_caches; /* Filter data, returns true to check this value */ struct { diff --git a/source/blender/editors/transform/transform_snap_object_editmesh.cc b/source/blender/editors/transform/transform_snap_object_editmesh.cc index e6b5def03a9..f0b17181fd2 100644 --- a/source/blender/editors/transform/transform_snap_object_editmesh.cc +++ b/source/blender/editors/transform/transform_snap_object_editmesh.cc @@ -110,7 +110,7 @@ static SnapCache_EditMesh *snap_object_data_editmesh_get(SnapObjectContext *sctx bool init = false; if (std::unique_ptr *em_cache_p = sctx->editmesh_caches.lookup_ptr( - em)) + ob_eval->runtime->data_orig)) { em_cache = static_cast(em_cache_p->get()); bool is_dirty = false; @@ -157,7 +157,7 @@ static SnapCache_EditMesh *snap_object_data_editmesh_get(SnapObjectContext *sctx else if (create) { std::unique_ptr em_cache_ptr = std::make_unique(); em_cache = em_cache_ptr.get(); - sctx->editmesh_caches.add_new(em, std::move(em_cache_ptr)); + sctx->editmesh_caches.add_new(ob_eval->runtime->data_orig, std::move(em_cache_ptr)); init = true; }