From f2edb935a41765243fe72ed6570e96e7d87852d7 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 9 Jun 2017 20:16:07 -0400 Subject: ecore-ipc: don't return dead clients in ecore_ipc_server_clients_get @fix fix T5383 --- src/lib/ecore_ipc/ecore_ipc.c | 7 ++++++- src/lib/ecore_ipc/ecore_ipc_private.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/lib/ecore_ipc') diff --git a/src/lib/ecore_ipc/ecore_ipc.c b/src/lib/ecore_ipc/ecore_ipc.c index 0c08bfcd5f..e9973f30a7 100644 --- a/src/lib/ecore_ipc/ecore_ipc.c +++ b/src/lib/ecore_ipc/ecore_ipc.c @@ -809,6 +809,8 @@ ecore_ipc_server_del(Ecore_Ipc_Server *svr) servers = eina_list_remove(servers, svr); if (svr->buf) free(svr->buf); + eina_list_free(svr->dead_clients); + eina_list_free(svr->clients); ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE); DBG("server %p freed", svr); free(svr); @@ -1233,6 +1235,9 @@ _ecore_ipc_client_socket_del(Ecore_Ipc_Client *cl) efl_io_closer_close(cl->socket.socket); efl_unref(cl->socket.socket); cl->socket.socket = NULL; + if (!cl->svr) return; + cl->svr->clients = eina_list_remove(cl->svr->clients, cl); + cl->svr->dead_clients = eina_list_append(cl->svr->dead_clients, cl); } } @@ -1355,7 +1360,7 @@ ecore_ipc_client_del(Ecore_Ipc_Client *cl) svr = cl->svr; if (cl->socket.socket) _ecore_ipc_client_socket_del(cl); if (ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER)) - svr->clients = eina_list_remove(svr->clients, cl); + svr->dead_clients = eina_list_remove(svr->dead_clients, cl); if (cl->buf) free(cl->buf); ECORE_MAGIC_SET(cl, ECORE_MAGIC_NONE); free(cl); diff --git a/src/lib/ecore_ipc/ecore_ipc_private.h b/src/lib/ecore_ipc/ecore_ipc_private.h index 9978b16143..72ec014e7c 100644 --- a/src/lib/ecore_ipc/ecore_ipc_private.h +++ b/src/lib/ecore_ipc/ecore_ipc_private.h @@ -103,6 +103,7 @@ struct _Ecore_Ipc_Server Eo *server; Eina_List *clients; + Eina_List *dead_clients; void *data; unsigned char *buf; int buf_size; -- cgit v1.2.1