forked from enlightenment/efl
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
This commit is contained in:
parent
f23344733f
commit
df652673fe
|
@ -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 \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue