evas ector: fix memory leaks. 01/193101/1
authorHermet Park <hermetpark@gmail.com>
Wed, 14 Nov 2018 12:51:24 +0000 (21:51 +0900)
committerHermet Park <hermetpark@gmail.com>
Wed, 14 Nov 2018 12:52:53 +0000 (21:52 +0900)
Summary:
Make it sure ref/unref pairs.

unpaired reference count occures object dangled.

@fix

Reviewers: #committers

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7270

Change-Id: I51f167bf506f110236b6ee04da60c13cfbdd5fa3

src/lib/ector/ector_renderer_gradient.c
src/lib/ector/ector_renderer_gradient.eo
src/lib/ector/ector_renderer_shape.c
src/lib/ector/ector_renderer_shape.eo
src/lib/evas/canvas/evas_vg_shape.c

index a3e393a..8ba3ba3 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "ector_private.h"
 
+#define MY_CLASS ECTOR_RENDERER_GRADIENT_MIXIN
+
 static void
 _ector_renderer_gradient_efl_gfx_gradient_stop_set(Eo *obj EINA_UNUSED,
                                                                 Ector_Renderer_Gradient_Data *pd,
@@ -49,5 +51,11 @@ _ector_renderer_gradient_efl_gfx_gradient_spread_get(const Eo *obj EINA_UNUSED,
    return pd->s;
 }
 
+static void
+_ector_renderer_gradient_efl_object_invalidate(Eo *obj EINA_UNUSED,
+                                               Ector_Renderer_Gradient_Data *pd)
+{
+   if (pd->colors) free(pd->colors);
+}
 
 #include "ector_renderer_gradient.eo.c"
index 045c005..f19aa83 100644 (file)
@@ -1,9 +1,10 @@
-mixin Ector.Renderer.Gradient (Efl.Gfx.Gradient)
+mixin Ector.Renderer.Gradient (Efl.Gfx.Gradient, Efl.Object)
 {
    [[Ector gradient renderer mixin]]
    eo_prefix: ector_renderer_gradient;
    implements {
       Efl.Gfx.Gradient.stop { get; set; }
       Efl.Gfx.Gradient.spread { get; set; }
+      Efl.Object.invalidate;
    }
 }
index 162add2..628acb6 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "ector_private.h"
 
+#define MY_CLASS ECTOR_RENDERER_SHAPE_MIXIN
+
 static void
 _ector_renderer_shape_fill_set(Eo *obj EINA_UNUSED,
                                        Ector_Renderer_Shape_Data *pd,
@@ -52,4 +54,14 @@ _ector_renderer_shape_stroke_marker_get(const Eo *obj EINA_UNUSED,
    return pd->stroke.marker;
 }
 
+static void
+_ector_renderer_shape_efl_object_invalidate(Eo *obj EINA_UNUSED,
+                                            Ector_Renderer_Shape_Data *pd)
+{
+   if (pd->fill) efl_unref(pd->fill);
+   if (pd->stroke.fill) efl_unref(pd->stroke.fill);
+   if (pd->stroke.marker) efl_unref(pd->stroke.marker);
+}
+
+
 #include "ector_renderer_shape.eo.c"
index 1a1a9ae..0206b1a 100644 (file)
@@ -1,39 +1,42 @@
 import ector_renderer;
 
-mixin Ector.Renderer.Shape (Efl.Gfx.Shape)
+mixin Ector.Renderer.Shape (Efl.Gfx.Shape, Efl.Object)
 {
    [[Ector shape renderer mixin]]
    eo_prefix: ector_renderer_shape;
    methods {
       @property fill {
-          [[Fill property]]
+         [[Fill property]]
          set {
-    }
-    get {
-    }
-    values {
-       r: const(Ector.Renderer); [[Ector fill renderer]]
-    }
+         }
+         get {
+         }
+         values {
+            r: const(Ector.Renderer); [[Ector fill renderer]]
+         }
       }
       @property stroke_fill {
-          [[Stroke fill property]]
+         [[Stroke fill property]]
          set {
-    }
-    get {
-    }
-    values {
-       r: const(Ector.Renderer); [[Ector stroke fill renderer]]
-    }
+         }
+          get {
+         }
+         values {
+            r: const(Ector.Renderer); [[Ector stroke fill renderer]]
+         }
       }
       @property stroke_marker {
-          [[Stroke marker property]]
+         [[Stroke marker property]]
          set {
-    }
-    get {
-    }
-    values {
-       r: const(Ector.Renderer); [[Ector stroke marker renderer]]
-    }
+         }
+         get {
+         }
+         values {
+            r: const(Ector.Renderer); [[Ector stroke marker renderer]]
+         }
       }
    }
+   implements {
+      Efl.Object.invalidate;
+   }
 }
index 24cc485..49ea67f 100644 (file)
@@ -137,8 +137,12 @@ _efl_canvas_vg_shape_efl_object_constructor(Eo *obj, Efl_Canvas_Vg_Shape_Data *p
 }
 
 static void
-_efl_canvas_vg_shape_efl_object_destructor(Eo *obj, Efl_Canvas_Vg_Shape_Data *pd EINA_UNUSED)
+_efl_canvas_vg_shape_efl_object_destructor(Eo *obj, Efl_Canvas_Vg_Shape_Data *pd)
 {
+   if (pd->fill) efl_unref(pd->fill);
+   if (pd->stroke.fill) efl_unref(pd->stroke.fill);
+   if (pd->stroke.marker) efl_unref(pd->stroke.marker);
+
    efl_gfx_path_reset(obj);
    efl_destructor(efl_super(obj, MY_CLASS));
 }