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

-- 


Reply via email to