cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f4426d29604a3bf43cbb241001d6f30204effe3a

commit f4426d29604a3bf43cbb241001d6f30204effe3a
Author: Cedric BAIL <cedric.b...@free.fr>
Date:   Thu Mar 21 13:33:30 2019 -0700

    eio: guarantee that we will at least process one request per loop iteration 
for very slow system.
    
    Reviewed-by: Marcel Hollerbach <m...@marcel-hollerbach.de>
    Differential Revision: https://phab.enlightenment.org/D8447
---
 src/lib/eio/efl_io_model.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/lib/eio/efl_io_model.c b/src/lib/eio/efl_io_model.c
index e43c9c0e34..e2b3697e08 100644
--- a/src/lib/eio/efl_io_model.c
+++ b/src/lib/eio/efl_io_model.c
@@ -388,16 +388,20 @@ _eio_build_st_then_clobber(const Efl_Io_Model *model, 
Efl_Io_Model_Data *pd)
 }
 
 static Eina_List *delayed_queue = NULL;
+static Eina_Bool delayed_one = EINA_FALSE;
 
 static void
 _delayed_flush(void *data EINA_UNUSED, const Efl_Event *ev)
 {
    Eina_Promise *p;
-
-   EINA_LIST_FREE(delayed_queue, p)
-     eina_promise_resolve(p, EINA_VALUE_EMPTY);
+   Eina_List *tmp = delayed_queue;
 
    efl_event_callback_del(ev->object, EFL_LOOP_EVENT_IDLE, _delayed_flush, 
NULL);
+
+   delayed_one = EINA_FALSE;
+   delayed_queue = NULL;
+   EINA_LIST_FREE(tmp, p)
+     eina_promise_resolve(p, EINA_VALUE_EMPTY);
 }
 
 static Eina_Value
@@ -447,7 +451,8 @@ _eio_build_mime_now(Eo *model, void *data, const Eina_Value 
v)
    if (!pd->loop) goto on_error;
 
    // Make sure that we are not over consuming time in the main loop
-   if (delayed_queue || ecore_time_get() - ecore_loop_time_get() > 0.004)
+   if (!delayed_one &&
+       (delayed_queue || ecore_time_get() - ecore_loop_time_get() > 0.004))
      {
         Eina_Future *f = efl_future_then(model, _build_delay(model),
                                          .success = _eio_build_mime_now,
@@ -460,6 +465,7 @@ _eio_build_mime_now(Eo *model, void *data, const Eina_Value 
v)
    _eio_build_mime_clean(pd);
 
    efl_model_properties_changed(model, "mime_type");
+   delayed_one = EINA_TRUE;
 
    return v;
 

-- 


Reply via email to