From 3671dd64c6cbf6a8ce3f20c1be143805cf3c9e49 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 4 Jul 2016 15:10:17 +0900 Subject: [PATCH] ecore: Fix obvious crash with legacy timers ecore_timer_del() checks a flag "inside_call" that can be set before calling the timer cb... but it was never reset to 0. So, all legacy timers would keep on ticking forever and ever, until they return CANCEL. Anyway, I find the distinction between eo_del and ecore_timer_del very troubling. eo_del() should work on a legacy timer. Ping @cedric. Maybe override eo_del()? Fixes T3898 --- src/lib/ecore/ecore_timer.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/ecore/ecore_timer.c b/src/lib/ecore/ecore_timer.c index 391c792e4b..2d9e1bcd40 100644 --- a/src/lib/ecore/ecore_timer.c +++ b/src/lib/ecore/ecore_timer.c @@ -168,6 +168,8 @@ _ecore_timer_legacy_tick(void *data, const Eo_Event *event) if (!_ecore_call_task_cb(legacy->func, (void*)legacy->data) || legacy->delete_me) eo_del(event->object); + else + legacy->inside_call = 0; } EO_CALLBACKS_ARRAY_DEFINE(legacy_timer,