cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2db02da4bd28866d16f48762a4c089421f5c914c
commit 2db02da4bd28866d16f48762a4c089421f5c914c Author: Cedric BAIL <[email protected]> Date: Mon Jun 6 16:28:52 2016 -0700 ecore: make sure lifecycle of Efl.Loop.Fd is correct. --- src/tests/ecore/ecore_test_ecore.c | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/tests/ecore/ecore_test_ecore.c b/src/tests/ecore/ecore_test_ecore.c index 3c65e52..338bb74 100644 --- a/src/tests/ecore/ecore_test_ecore.c +++ b/src/tests/ecore/ecore_test_ecore.c @@ -310,6 +310,59 @@ START_TEST(ecore_test_efl_loop_fd) } END_TEST +static Eina_Bool +_eo_del_cb(void *data, const Eo_Event *ev EINA_UNUSED) +{ + Eina_Bool *dead = data; + + *dead = EINA_TRUE; + + return EINA_TRUE; +} + +START_TEST(ecore_test_efl_loop_fd_lifecycle) +{ + Eina_Bool did = EINA_FALSE; + Eina_Bool dead = EINA_FALSE; + Eo *fd; + int comm[2]; + int ret; + + eo_init(); + + ret = ecore_init(); + fail_if(ret < 1); + + ret = pipe(comm); + fail_if(ret != 0); + + fd = eo_add(EFL_LOOP_FD_CLASS, ecore_main_loop_get(), + efl_loop_fd_set(eo_self, comm[0]), + eo_event_callback_add(eo_self, EFL_LOOP_FD_EVENT_READ, _eo_read_cb, &did), + eo_event_callback_add(eo_self, EO_EVENT_DEL, _eo_del_cb, &dead)); + eo_ref(fd); + fail_if(fd == NULL); + + ret = write(comm[1], &did, 1); + fail_if(ret != 1); + + ecore_main_loop_begin(); + + close(comm[0]); + close(comm[1]); + + fail_if(did == EINA_FALSE); + fail_if(dead == EINA_TRUE); + + ret = ecore_shutdown(); + + eo_del(fd); + fail_if(dead == EINA_FALSE); + + eo_shutdown(); +} +END_TEST + START_TEST(ecore_test_ecore_main_loop_fd_handler_activate_modify) { Eina_Bool did = EINA_FALSE; @@ -789,4 +842,5 @@ void ecore_test_ecore(TCase *tc) tcase_add_test(tc, ecore_test_ecore_main_loop_poller); tcase_add_test(tc, ecore_test_ecore_main_loop_poller_add_del); tcase_add_test(tc, ecore_test_efl_loop_fd); + tcase_add_test(tc, ecore_test_efl_loop_fd_lifecycle); } --
