ector: fix memory leak in Ector.Renderer.Generic.Base class
authorSubhransu Mohanty <sub.mohanty@samsung.com>
Fri, 3 Apr 2015 14:38:18 +0000 (16:38 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:38:18 +0000 (16:38 +0200)
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
src/lib/ector/ector_renderer_base.c
src/lib/ector/ector_renderer_generic_base.eo

index 4f45542..b4c44c9 100644 (file)
@@ -8,27 +8,29 @@
 #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 *
index e82b022..2e42fea 100644 (file)
@@ -108,6 +108,7 @@ abstract Ector.Renderer.Generic.Base (Eo.Base)
       }
    }
    implements {
+      Eo.Base.destructor;
       @virtual .draw;
       @virtual .bounds_get;
       @virtual .done;