cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=a16d12799789d6c69288fbafb81bdd04f9a59f21
commit a16d12799789d6c69288fbafb81bdd04f9a59f21 Author: Cedric Bail <ced...@osg.samsung.com> Date: Fri May 11 09:28:26 2018 -0700 ecore: because fd_handler do not have the main loop as parent, the main loop can die before them. --- src/lib/ecore/ecore_main.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c index 420b76822e..67f48cba44 100644 --- a/src/lib/ecore/ecore_main.c +++ b/src/lib/ecore/ecore_main.c @@ -1341,6 +1341,8 @@ _ecore_main_fd_handler_del(Eo *obj EINA_UNUSED, Efl_Loop_Data *pd, Ecore_Fd_Handler *fd_handler) { + void *r = fd_handler->data; + DBG("_ecore_main_fd_handler_del %p", fd_handler); if (fd_handler->delete_me) { @@ -1350,16 +1352,25 @@ _ecore_main_fd_handler_del(Eo *obj EINA_UNUSED, fd_handler->handler = NULL; fd_handler->delete_me = EINA_TRUE; - _ecore_main_fdh_poll_del(pd, fd_handler); - pd->fd_handlers_to_delete = eina_list_append - (pd->fd_handlers_to_delete, fd_handler); - if (fd_handler->prep_func && pd->fd_handlers_with_prep) - pd->fd_handlers_with_prep = eina_list_remove - (pd->fd_handlers_with_prep, fd_handler); - if (fd_handler->buf_func && pd->fd_handlers_with_buffer) - pd->fd_handlers_with_buffer = eina_list_remove - (pd->fd_handlers_with_buffer, fd_handler); - return fd_handler->data; + if (pd) + { + _ecore_main_fdh_poll_del(pd, fd_handler); + pd->fd_handlers_to_delete = eina_list_append + (pd->fd_handlers_to_delete, fd_handler); + if (fd_handler->prep_func && pd->fd_handlers_with_prep) + pd->fd_handlers_with_prep = eina_list_remove + (pd->fd_handlers_with_prep, fd_handler); + if (fd_handler->buf_func && pd->fd_handlers_with_buffer) + pd->fd_handlers_with_buffer = eina_list_remove + (pd->fd_handlers_with_buffer, fd_handler); + } + else + { + // The main loop is dead by now, so cleanup is required. + ECORE_MAGIC_SET(fd_handler, ECORE_MAGIC_NONE); + ecore_fd_handler_mp_free(fd_handler); + } + return r; } EAPI Ecore_Fd_Handler * --