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

-- 


Reply via email to