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:
Hosang Kim 2018-06-27 07:50:30 -04:00 committed by Mike Blumenkrantz
parent f23344733f
commit df652673fe
6 changed files with 36 additions and 10 deletions

View File

@ -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 \

View File

@ -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;
}

View File

@ -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

View File

@ -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 },

View File

@ -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);

View File

@ -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);
}