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;

-- 


Reply via email to