summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-07-04 15:10:17 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-07-04 15:15:48 +0900
commit3671dd64c6cbf6a8ce3f20c1be143805cf3c9e49 (patch)
treeac4124f17019d6060cc6479a7a39f244fc2bceed
parente2d7c11665d8d1eae225e4cce5cb5b388fd86aa7 (diff)
downloadefl-3671dd64c6cbf6a8ce3f20c1be143805cf3c9e49.tar.gz
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
-rw-r--r--src/lib/ecore/ecore_timer.c2
1 files changed, 2 insertions, 0 deletions
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,