raster pushed a commit to branch master.

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

commit a13570c17c97bb9407c24bcf78ab28eaa4541ad9
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Fri May 6 11:06:56 2016 +0900

    ecore timer - fuix up segv storm that has crept in with frees
    
    freeing already freed data, not clearing up pointers to freed data
    once freed etc. etc. etc. - segv land. fix that up so we can use efl
    again. :(
---
 src/lib/ecore/ecore_timer.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/lib/ecore/ecore_timer.c b/src/lib/ecore/ecore_timer.c
index 54cf773..1b69676 100644
--- a/src/lib/ecore/ecore_timer.c
+++ b/src/lib/ecore/ecore_timer.c
@@ -157,8 +157,14 @@ _ecore_timer_legacy_tick(void *data, const Eo_Event *event)
 
    if (!_ecore_call_task_cb(legacy->func, (void*)legacy->data))
      {
-        eo_del(event->obj);
-        free(legacy);
+        if (eo_key_data_get(event->obj, "_legacy"))
+          {
+             eo_key_del(event->obj, "_legacy");
+             eo_event_callback_del(event->obj, EFL_TIMER_EVENT_TICK,
+                                   _ecore_timer_legacy_tick, legacy),
+             free(legacy);
+             eo_del(event->obj);
+          }
      }
 
    return EO_CALLBACK_CONTINUE;
@@ -219,8 +225,10 @@ ecore_timer_del(Ecore_Timer *timer)
    legacy = eo_key_data_get(timer, "_legacy");
    data = (void*) legacy->data;
 
-   free(legacy);
    eo_key_del(timer, "_legacy");
+   eo_event_callback_del(timer, EFL_TIMER_EVENT_TICK,
+                         _ecore_timer_legacy_tick, legacy),
+   free(legacy);
    eo_del(timer);
 
    return data;

-- 


Reply via email to