jpeg pushed a commit to branch efl-1.18.

http://git.enlightenment.org/core/efl.git/commit/?id=c58e293d343396859daabdd348da6e4b2ea8ddc8

commit c58e293d343396859daabdd348da6e4b2ea8ddc8
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Tue Aug 16 14:57:02 2016 +0900

    evas: Fix potential memleak in event info objects
    
    The new event info being an eo object, it needs to be properly
    cleaned. I believe this memleak would not show up much in massif
    or other checking tools, as it's a stringshare leak. Also, most
    of those event objects will in fact be reused and never deleted.
---
 src/lib/evas/canvas/efl_event_key.c  | 21 +++++++++++++++++----
 src/lib/evas/canvas/efl_event_key.eo |  1 +
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/lib/evas/canvas/efl_event_key.c 
b/src/lib/evas/canvas/efl_event_key.c
index bce7c7c..8ee7acb 100644
--- a/src/lib/evas/canvas/efl_event_key.c
+++ b/src/lib/evas/canvas/efl_event_key.c
@@ -76,6 +76,22 @@ _efl_event_key_eo_base_constructor(Eo *obj, 
Efl_Event_Key_Data *pd EINA_UNUSED)
    return obj;
 }
 
+static inline void
+_efl_event_key_free(Efl_Event_Key_Data *pd)
+{
+   eina_stringshare_del(pd->key);
+   eina_stringshare_del(pd->keyname);
+   eina_stringshare_del(pd->string);
+   eina_stringshare_del(pd->compose);
+}
+
+EOLIAN static void
+_efl_event_key_eo_base_destructor(Eo *obj, Efl_Event_Key_Data *pd)
+{
+   _efl_event_key_free(pd);
+   eo_destructor(eo_super(obj, MY_CLASS));
+}
+
 EOLIAN static void
 _efl_event_key_pressed_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, 
Eina_Bool val)
 {
@@ -151,10 +167,7 @@ _efl_event_key_key_code_get(Eo *obj EINA_UNUSED, 
Efl_Event_Key_Data *pd)
 EOLIAN static void
 _efl_event_key_efl_event_reset(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
 {
-   eina_stringshare_del(pd->key);
-   eina_stringshare_del(pd->keyname);
-   eina_stringshare_del(pd->string);
-   eina_stringshare_del(pd->compose);
+   _efl_event_key_free(pd);
    memset(pd, 0, sizeof(*pd));
    pd->eo = obj;
    pd->fake = EINA_TRUE;
diff --git a/src/lib/evas/canvas/efl_event_key.eo 
b/src/lib/evas/canvas/efl_event_key.eo
index 897dd46..384aa75 100644
--- a/src/lib/evas/canvas/efl_event_key.eo
+++ b/src/lib/evas/canvas/efl_event_key.eo
@@ -54,6 +54,7 @@ class Efl.Event.Key (Eo.Base, Efl.Event, Efl.Input.State, 
Efl.Event.Input)
    implements {
       class.destructor;
       Eo.Base.constructor;
+      Eo.Base.destructor;
       Efl.Event.instance_get;
       Efl.Event.reset;
       Efl.Event.dup;

-- 


Reply via email to