jpeg pushed a commit to branch master.

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

commit 9fbb5e0e5dabc3e019f5d3d26da8066f3a176a28
Author: Jean-Philippe Andre <[email protected]>
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.
    
    @fix (backported as c58e293d343396859daabdd348)
---
 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 81dcd3f..2b81d4e 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_efl_object_constructor(Eo *obj, 
Efl_Event_Key_Data *pd EINA_UNUSE
    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_efl_object_destructor(Eo *obj, Efl_Event_Key_Data *pd)
+{
+   _efl_event_key_free(pd);
+   efl_destructor(efl_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 555aadb..e85b8ae 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 (Efl.Object, Efl.Event, Efl.Input.State, 
Efl.Event.Input)
    implements {
       class.destructor;
       Efl.Object.constructor;
+      Efl.Object.destructor;
       Efl.Event.instance_get;
       Efl.Event.reset;
       Efl.Event.dup;

-- 


Reply via email to