From c8764e9279ea47a75d60e39bdbcc4727e0236758 Mon Sep 17 00:00:00 2001 From: Subhransu Mohanty Date: Fri, 3 Apr 2015 16:38:18 +0200 Subject: [PATCH] ector: fix memory leak in Ector.Renderer.Generic.Base class Signed-off-by: Cedric BAIL --- src/lib/ector/ector_renderer_base.c | 22 +++++++++++--------- src/lib/ector/ector_renderer_generic_base.eo | 1 + 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/lib/ector/ector_renderer_base.c b/src/lib/ector/ector_renderer_base.c index 4f45542f70..b4c44c9801 100644 --- a/src/lib/ector/ector_renderer_base.c +++ b/src/lib/ector/ector_renderer_base.c @@ -7,28 +7,30 @@ #include "ector_private.h" +static void +_ector_renderer_generic_base_eo_base_destructor(Eo *obj, Ector_Renderer_Generic_Base_Data *pd) +{ + if (pd->m) free(pd->m); + eo_do_super(obj, ECTOR_RENDERER_GENERIC_BASE_CLASS, eo_destructor()); +} + static void _ector_renderer_generic_base_transformation_set(Eo *obj EINA_UNUSED, Ector_Renderer_Generic_Base_Data *pd, const Eina_Matrix3 *m) { - Eina_Matrix3 *tmp = pd->m; - - pd->m = NULL; if (!m) { - free(tmp); - tmp = NULL; + free(pd->m); + pd->m = NULL; } else { - if (!tmp) tmp = malloc(sizeof (Eina_Matrix3)); - if (!tmp) return ; + if (!pd->m) pd->m = malloc(sizeof (Eina_Matrix3)); + if (!pd->m) return ; - memcpy(tmp, m, sizeof (Eina_Matrix3)); + memcpy(pd->m, m, sizeof (Eina_Matrix3)); } - - pd->m = tmp; } static const Eina_Matrix3 * diff --git a/src/lib/ector/ector_renderer_generic_base.eo b/src/lib/ector/ector_renderer_generic_base.eo index e82b0223f9..2e42feaa98 100644 --- a/src/lib/ector/ector_renderer_generic_base.eo +++ b/src/lib/ector/ector_renderer_generic_base.eo @@ -108,6 +108,7 @@ abstract Ector.Renderer.Generic.Base (Eo.Base) } } implements { + Eo.Base.destructor; @virtual .draw; @virtual .bounds_get; @virtual .done;