summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHosang Kim <hosang12.kim@samsung.com>2018-06-27 07:50:30 -0400
committerMike Blumenkrantz <zmike@samsung.com>2018-06-27 07:50:31 -0400
commitdf652673febd8617d3f458a5c14478534e927940 (patch)
tree60785fae3f4d250c9c460c36c70373ec52e3de7b
parentf23344733f1e09b4b919647f0a49f9fdc9212804 (diff)
downloadefl-df652673febd8617d3f458a5c14478534e927940.tar.gz
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
-rw-r--r--src/Makefile_Evas.am1
-rw-r--r--src/lib/ecore_evas/ecore_evas.c2
-rw-r--r--src/lib/evas/canvas/evas_main.c20
-rw-r--r--src/tests/evas/evas_suite.c1
-rw-r--r--src/tests/evas/evas_suite.h1
-rw-r--r--src/tests/evas/evas_test_new.c21
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);
+}