From 94d19d5ff505af0b63085ec76b85f86dcd97b127 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Tue, 7 Jan 2020 14:13:37 +0100 Subject: GPencil: Fix unreported memory leak Thanks to @dfelinto for his help --- source/blender/blenkernel/intern/gpencil_modifier.c | 8 ++++++++ source/blender/draw/engines/gpencil/gpencil_cache_utils.c | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c index fe087256d25..bc0c54ed96e 100644 --- a/source/blender/blenkernel/intern/gpencil_modifier.c +++ b/source/blender/blenkernel/intern/gpencil_modifier.c @@ -862,6 +862,14 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob) const bool time_remap = BKE_gpencil_has_time_modifiers(ob); int cfra_eval = (int)DEG_get_ctime(depsgraph); + /* Clear any previous evaluated data. */ + if (ob->runtime.gpencil_tot_layers > 0) { + for (int i = 0; i < ob->runtime.gpencil_tot_layers; i++) { + bGPDframe *gpf_eval = &ob->runtime.gpencil_evaluated_frames[i]; + BKE_gpencil_free_frame_runtime_data(gpf_eval); + } + } + /* Create array of evaluated frames equal to number of layers. */ ob->runtime.gpencil_tot_layers = BLI_listbase_count(&gpd->layers); CLAMP_MIN(ob->runtime.gpencil_tot_layers, 1); diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c index f9df1342bf8..f21d96a304c 100644 --- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c +++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c @@ -349,7 +349,6 @@ void DRW_gpencil_freecache(struct Object *ob) for (int i = 0; i < ob->runtime.gpencil_tot_layers; i++) { bGPDframe *gpf_eval = &ob->runtime.gpencil_evaluated_frames[i]; BKE_gpencil_free_frame_runtime_data(gpf_eval); - gpf_eval = NULL; } ob->runtime.gpencil_tot_layers = 0; -- cgit v1.2.3