fix nasty bug of timers not being re-evaluated on rare case.

If there are no other main loop activity than a idlers and one idler
adds a timer, the new (and unique) timer would be ignored since it's
flagged as "just_added" and thus next iteration will not consider it,
possible entering an infinite wait as it could be the only thing to do
in main loop.

Antognolli found this nasty bug while handling timeout-and-die in
Ethumb, where the "disconnect" event is dispatched by EDBus from idler
and it was adding a timer to shutdown the daemon after a while without
clients.

By: Rafael Antognolli <antognolli@profusion.mobi>



SVN revision: 40923
This commit is contained in:
Gustavo Sverzut Barbieri 2009-06-06 22:31:34 +00:00
parent 87b0ca2ab1
commit 369a502a28
1 changed files with 2 additions and 2 deletions

View File

@ -545,8 +545,6 @@ _ecore_main_loop_iterate_internal(int once_only)
while (_ecore_timer_call(now));
_ecore_timer_cleanup();
}
/* any timers re-added as a result of these are allowed to go */
_ecore_timer_enable_new();
/* process signals into events .... */
while (_ecore_signal_count_get()) _ecore_signal_call();
if (_ecore_event_exist())
@ -596,6 +594,8 @@ _ecore_main_loop_iterate_internal(int once_only)
_ecore_fps_debug_runtime_add(t2 - t1);
}
start_loop:
/* any timers re-added as a result of these are allowed to go */
_ecore_timer_enable_new();
if (do_quit)
{
in_main_loop--;