cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=17f433c57bfa11319a22fde1aedb21e99a3a1268
commit 17f433c57bfa11319a22fde1aedb21e99a3a1268 Author: Mike Blumenkrantz <zm...@samsung.com> Date: Fri Jul 19 15:42:09 2019 -0400 ecore: avoid breaking next main loop start if quit occurs outside of loop in the case where ecore_main_loop_quit() was called before ecore_main_loop_begin(), the latter call would exit immediately without ever iterating the main loop @fix Reviewed-by: Cedric BAIL <cedric.b...@free.fr> Differential Revision: https://phab.enlightenment.org/D9360 --- src/lib/ecore/ecore_main.c | 3 +++ src/lib/ecore/ecore_private.h | 1 + 2 files changed, 4 insertions(+) diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c index 523add2af3..f7d248fc27 100644 --- a/src/lib/ecore/ecore_main.c +++ b/src/lib/ecore/ecore_main.c @@ -1177,6 +1177,7 @@ _ecore_main_loop_iterate_may_block(Eo *obj, Efl_Loop_Data *pd, int may_block) void _ecore_main_loop_begin(Eo *obj, Efl_Loop_Data *pd) { + pd->loop_active++; if (obj == ML_OBJ) { #ifdef HAVE_SYSTEMD @@ -1240,11 +1241,13 @@ _ecore_main_loop_begin(Eo *obj, Efl_Loop_Data *pd) pd->do_quit = 0; #endif } + pd->loop_active--; } void _ecore_main_loop_quit(Eo *obj, Efl_Loop_Data *pd) { + if (!pd->loop_active) return; pd->do_quit = 1; if (obj != ML_OBJ) return; #ifdef USE_G_MAIN_LOOP diff --git a/src/lib/ecore/ecore_private.h b/src/lib/ecore/ecore_private.h index b66b50915d..99a3fb7740 100644 --- a/src/lib/ecore/ecore_private.h +++ b/src/lib/ecore/ecore_private.h @@ -163,6 +163,7 @@ struct _Efl_Loop_Data int idlers; int in_loop; + unsigned int loop_active; struct { int high; --