diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 18c872bd39..c356995b55 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -1,5 +1,6 @@ #include "evas_common_private.h" #include "evas_private.h" +#include #include #include @@ -2748,7 +2749,16 @@ _evas_render_cutout_add(Evas_Public_Data *evas, void *context, void evas_render_rendering_wait(Evas_Public_Data *evas) { - while (evas->rendering) evas_async_events_process_blocking(); + double t0 = ecore_time_get(); + while (evas->rendering) + { + evas_async_events_process_blocking(); + if ((ecore_time_get() - t0) > 0.2) + { + ERR("timeout waiting for async rendering"); + break; + } + } } /* @@ -3939,6 +3949,10 @@ evas_render_wakeup(Evas *eo_e) } eina_spinlock_release(&(evas->render.lock)); + /* post rendering */ + _rendering_evases = eina_list_remove_list(_rendering_evases, evas->rendering); + evas->rendering = NULL; + /* flush redraws */ if (haveup) { @@ -3986,10 +4000,6 @@ evas_render_wakeup(Evas *eo_e) free(job); } - /* post rendering */ - _rendering_evases = eina_list_remove_list(_rendering_evases, evas->rendering); - evas->rendering = NULL; - post.updated_area = ret_updates; _cb_always_call(eo_e, evas, EVAS_CALLBACK_RENDER_POST, &post); evas->inside_post_render = EINA_FALSE;