diff --git a/legacy/ecore/src/lib/ecore/ecore_main.c b/legacy/ecore/src/lib/ecore/ecore_main.c index 4dbc7761cc..b585f08573 100644 --- a/legacy/ecore/src/lib/ecore/ecore_main.c +++ b/legacy/ecore/src/lib/ecore/ecore_main.c @@ -777,8 +777,7 @@ _ecore_main_loop_iterate_internal(int once_only) if (_ecore_main_select(0.0) > 0) have_event = 1; if (_ecore_signal_count_get() > 0) have_signal = 1; if (have_event || have_signal) break; - next_time = _ecore_timer_next_get(); - if (next_time >= 0) goto start_loop; + if (_ecore_timers_exists()) goto start_loop; if (do_quit) break; } } diff --git a/legacy/ecore/src/lib/ecore/ecore_private.h b/legacy/ecore/src/lib/ecore/ecore_private.h index 34a5f58fd5..aa7a75491e 100644 --- a/legacy/ecore/src/lib/ecore/ecore_private.h +++ b/legacy/ecore/src/lib/ecore/ecore_private.h @@ -119,6 +119,7 @@ void _ecore_timer_shutdown(void); void _ecore_timer_cleanup(void); void _ecore_timer_enable_new(void); double _ecore_timer_next_get(void); +int _ecore_timers_exists(void); int _ecore_timer_call(double when); void _ecore_idler_shutdown(void); diff --git a/legacy/ecore/src/lib/ecore/ecore_timer.c b/legacy/ecore/src/lib/ecore/ecore_timer.c index cb6bc549d7..9781bf680e 100644 --- a/legacy/ecore/src/lib/ecore/ecore_timer.c +++ b/legacy/ecore/src/lib/ecore/ecore_timer.c @@ -409,6 +409,17 @@ _ecore_timer_enable_new(void) EINA_INLIST_FOREACH(timers, timer) timer->just_added = 0; } +int +_ecore_timers_exists(void) +{ + Ecore_Timer *timer = timers; + + while ((timer) && (timer->delete_me)) + timer = (Ecore_Timer *)EINA_INLIST_GET(timer)->next; + + return !!timer; +} + static inline Ecore_Timer * _ecore_timer_first_get(void) {