discomfitor pushed a commit to branch master.

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

commit df652673febd8617d3f458a5c14478534e927940
Author: Hosang Kim <hosang12....@samsung.com>
Date:   Wed Jun 27 07:50:30 2018 -0400

    evas: move clearing cows to right place.
    
    Summary:
    Evas is child of main loop now, so evas is deleted when main loop is 
quitted.
    In case of not calling evas_free() explicitly by app side, a crash occurs.
    So move clearing cows to below ecore_shutdown().
    
    Test Plan:
    //Compile with:
    //gcc evas_test.c -o evas_test `pkg-config --cflags --libs ecore evas`
    
    #include <Evas.h>
    #include <Ecore.h>
    
    Eina_Bool
    _timer_cb (void *data)
    {
        ecore_main_loop_quit();
        return 0;
    }
    int
    main(int argc, char *argv[])
    {
    
       evas_init();
       Evas *evas = evas_new();
       Evas_Object *obj = evas_object_box_add(evas);
       Evas_Object *rect = evas_object_rectangle_add(evas);
       evas_object_color_set(rect, 255, 255, 255, 255);
       evas_object_resize(rect, 300, 400);
       evas_object_show(rect);
    
       evas_object_box_append(obj, rect);
    
       evas_object_show(obj);
       ecore_timer_add(2.0, _timer_cb, NULL);
       ecore_main_loop_begin();
    
       evas_shutdown();
       return 0;
    }
    
    Reviewers: devilhorns, cedric, jpeg, id213sin, woohyun, zmike
    
    Reviewed By: zmike
    
    Subscribers: cedric, #committers, zmike
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6346
---
 src/Makefile_Evas.am            |  1 +
 src/lib/ecore_evas/ecore_evas.c |  2 +-
 src/lib/evas/canvas/evas_main.c | 20 +++++++++++---------
 src/tests/evas/evas_suite.c     |  1 +
 src/tests/evas/evas_suite.h     |  1 +
 src/tests/evas/evas_test_new.c  | 21 +++++++++++++++++++++
 6 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am
index 2caa195ab1..deab83005d 100644
--- a/src/Makefile_Evas.am
+++ b/src/Makefile_Evas.am
@@ -2434,6 +2434,7 @@ TESTS += tests/evas/evas_suite
 tests_evas_evas_suite_SOURCES = \
 tests/evas/evas_suite.c \
 tests/evas/evas_test_init.c \
+tests/evas/evas_test_new.c \
 tests/evas/evas_test_object.c \
 tests/evas/evas_test_object_smart.c \
 tests/evas/evas_test_textblock.c \
diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 52dfc36db1..88dd59ee7c 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -667,8 +667,8 @@ ecore_evas_shutdown(void)
 
    eina_log_domain_unregister(_ecore_evas_log_dom);
    _ecore_evas_log_dom = -1;
-   evas_shutdown();
    ecore_shutdown();
+   evas_shutdown();
 
    return _ecore_evas_init_count;
 }
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 2849f21ceb..50555c4ea1 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -155,9 +155,19 @@ evas_shutdown(void)
 #endif
    evas_cache_vg_shutdown();
 
+   evas_font_path_global_clear();
+
+   evas_filter_shutdown();
+
+   evas_thread_shutdown();
+   _evas_preload_thread_shutdown();
+   evas_async_events_shutdown();
+   evas_module_shutdown();
+
+   ecore_shutdown();
+
    _efl_gfx_map_shutdown();
 
-   evas_font_path_global_clear();
    eina_cow_del(evas_object_proxy_cow);
    eina_cow_del(evas_object_map_cow);
    eina_cow_del(evas_object_state_cow);
@@ -172,17 +182,9 @@ evas_shutdown(void)
    evas_object_image_load_opts_cow = NULL;
    evas_object_image_state_cow = NULL;
 
-   evas_filter_shutdown();
    eina_cow_del(evas_object_mask_cow);
    evas_object_mask_cow = NULL;
 
-   evas_thread_shutdown();
-   _evas_preload_thread_shutdown();
-   evas_async_events_shutdown();
-   evas_module_shutdown();
-
-   ecore_shutdown();
-
 #ifdef BUILD_LOADER_EET
    eet_shutdown();
 #endif
diff --git a/src/tests/evas/evas_suite.c b/src/tests/evas/evas_suite.c
index a5c27d5dfa..e84d23f5dc 100644
--- a/src/tests/evas/evas_suite.c
+++ b/src/tests/evas/evas_suite.c
@@ -10,6 +10,7 @@
 
 static const Efl_Test_Case etc[] = {
   { "Evas", evas_test_init },
+  { "Evas New", evas_test_new },
   { "Object", evas_test_object },
   { "Object Textblock", evas_test_textblock },
   { "Object Text", evas_test_text },
diff --git a/src/tests/evas/evas_suite.h b/src/tests/evas/evas_suite.h
index f7feb2ccbe..0da47fe13f 100644
--- a/src/tests/evas/evas_suite.h
+++ b/src/tests/evas/evas_suite.h
@@ -4,6 +4,7 @@
 #include <check.h>
 #include "../efl_check.h"
 void evas_test_init(TCase *tc);
+void evas_test_new(TCase *tc);
 void evas_test_object(TCase *tc);
 void evas_test_textblock(TCase *tc);
 void evas_test_text(TCase *tc);
diff --git a/src/tests/evas/evas_test_new.c b/src/tests/evas/evas_test_new.c
new file mode 100644
index 0000000000..c95c43a230
--- /dev/null
+++ b/src/tests/evas/evas_test_new.c
@@ -0,0 +1,21 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+
+#include <Evas.h>
+
+#include "evas_suite.h"
+
+EFL_START_TEST(evas_free_none)
+{
+   Evas *evas = evas_new();
+   Evas_Object *obj = evas_object_rectangle_add(evas);
+}
+EFL_END_TEST
+
+void evas_test_new(TCase *tc)
+{
+   tcase_add_test(tc, evas_free_none);
+}

-- 


Reply via email to