From: Carsten Haitzler (Rasterman) Date: Fri, 6 May 2016 02:06:56 +0000 (+0900) Subject: ecore timer - fuix up segv storm that has crept in with frees X-Git-Tag: upstream/1.20.0~6467 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a13570c17c97bb9407c24bcf78ab28eaa4541ad9;p=platform%2Fupstream%2Fefl.git 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. :( --- 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;