ecore timer - fuix up segv storm that has crept in with frees
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Fri, 6 May 2016 02:06:56 +0000 (11:06 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Fri, 6 May 2016 02:06:56 +0000 (11:06 +0900)
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

index 54cf773..1b69676 100644 (file)
@@ -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;