jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=aac516f352b27684b1a1aad72cf82486a3bd81de
commit aac516f352b27684b1a1aad72cf82486a3bd81de Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Tue Dec 6 10:40:11 2016 +0900 evas: Ensure single init of common per canvas After @cedric's commit 6427c77707fb6116a98b we end up with E not working in Xephyr, because evas_common_shutdown() is called too many times (init_count == -1). So I'm being paranoid and tracking whether Evas has initialized or not evas_common. That way we end up with exactly the right number of inits. We even reach 0 after E shuts down :) --- src/lib/evas/canvas/evas_main.c | 12 +++++++++--- src/lib/evas/include/evas_private.h | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index 83f75b6..269d329 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -353,7 +353,10 @@ _evas_canvas_efl_object_destructor(Eo *eo_e, Evas_Public_Data *e) e->engine.data.context); e->engine.func->output_free(e->engine.data.output); e->engine.func->info_free(eo_e, e->engine.info); - + } + if (e->common_init) + { + e->common_init = 0; evas_common_shutdown(); } @@ -426,9 +429,12 @@ _evas_canvas_engine_info_set(Eo *eo_e, Evas_Public_Data *e, Evas_Engine_Info *in if (info->magic != e->engine.info_magic) return EINA_FALSE; evas_canvas_async_block(e); - evas_common_init(); + if (!e->common_init) + { + e->common_init = 1; + evas_common_init(); + } res = e->engine.func->setup(eo_e, info); - if (!res) evas_common_shutdown(); return res; } diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 7657655..a334ed1 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -938,6 +938,7 @@ struct _Evas_Public_Data Eina_Bool is_frozen : 1; Eina_Bool rendering : 1; Eina_Bool render2 : 1; + Eina_Bool common_init : 1; }; struct _Evas_Layer --