netstar pushed a commit to tag v0.6.0. http://git.enlightenment.org/apps/edi.git/commit/?id=85594c93a9882a593215b6e23859d01e1275e2e2
commit 85594c93a9882a593215b6e23859d01e1275e2e2 Author: Al Poole <nets...@gmail.com> Date: Sun Sep 24 11:30:55 2017 +0100 exe: fix cleanup on FreeBSD of ecore_con_server/clients. --- src/lib/edi_exe.c | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/lib/edi_exe.c b/src/lib/edi_exe.c index 078a033..72934dd 100644 --- a/src/lib/edi_exe.c +++ b/src/lib/edi_exe.c @@ -15,13 +15,11 @@ typedef struct _Edi_Exe_Args { void ((*func)(int, void *)); void *data; pid_t pid; - char *path; - Ecore_Con_Server *srv; Ecore_Event_Handler *handler; } Edi_Exe_Args; static Eina_Bool -_edi_exe_notify_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) +_edi_exe_notify_client_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) { int *status; Edi_Exe_Args *args; @@ -34,18 +32,7 @@ _edi_exe_notify_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSE args->func(*status, args->data); - /* Manually cleaning up??? */ - if (ecore_con_server_fd_get(args->srv) != -1) - close(ecore_con_server_fd_get(args->srv)); - if (ecore_con_client_fd_get(ev->client) != -1) - close(ecore_con_client_fd_get(ev->client)); - - if (args->path) - { - if (ecore_file_exists(args->path)) - unlink(args->path); - free(args->path); - } + ecore_con_client_send(ev->client, status, sizeof(int)); free(args); @@ -65,13 +52,25 @@ edi_exe_notify_handle(const char *name, void ((*func)(int, void *)), void *data) args = malloc(sizeof(Edi_Exe_Args)); args->func = func; args->data = data; - args->path = ecore_con_local_path_new(EINA_FALSE, name, 0); - args->srv = srv; - args->handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _edi_exe_notify_data_cb, args); + args->handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _edi_exe_notify_client_data_cb, args); return EINA_TRUE; } +static Eina_Bool +_edi_exe_notify_server_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + Ecore_Con_Event_Server_Data *ev = event; + Edi_Exe_Args *args = data; + + ecore_event_handler_del(args->handler); + ecore_con_server_del(ev->server); + + free(args); + + return ECORE_CALLBACK_DONE; +} + static Eina_Bool _edi_exe_event_done_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) { @@ -90,13 +89,16 @@ _edi_exe_event_done_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event srv = ecore_con_server_connect(ECORE_CON_LOCAL_USER, name, 0, NULL); if (srv) { + ecore_event_handler_del(args->handler); + args->handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, _edi_exe_notify_server_data_cb, args); ecore_con_server_send(srv, &ev->exit_code, sizeof(int)); ecore_con_server_flush(srv); } - - ecore_event_handler_del(args->handler); - - free(args); + else + { + ecore_event_handler_del(args->handler); + free(args); + } return ECORE_CALLBACK_DONE; } --