From 214f4563a71a41354127660172e13d1f16941c28 Mon Sep 17 00:00:00 2001 From: codewarrior Date: Thu, 30 Mar 2006 14:01:04 +0000 Subject: [PATCH] - maintain a list of connected clients and use that for clients_get SVN revision: 21601 --- legacy/ecore/src/lib/ecore_ipc/ecore_ipc.c | 17 ++++++++++++----- .../ecore/src/lib/ecore_ipc/ecore_ipc_private.h | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_ipc/ecore_ipc.c b/legacy/ecore/src/lib/ecore_ipc/ecore_ipc.c index 178f48b305..c7b2a7061f 100644 --- a/legacy/ecore/src/lib/ecore_ipc/ecore_ipc.c +++ b/legacy/ecore/src/lib/ecore_ipc/ecore_ipc.c @@ -355,6 +355,8 @@ ecore_ipc_server_add(Ecore_Ipc_Type compl_type, const char *name, int port, cons } svr->max_buf_size = 32 * 1024; svr->data = (void *)data; + svr->client_list = ecore_list_new(); + ecore_list_init(svr->client_list); servers = _ecore_list2_append(servers, svr); ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER); return svr; @@ -438,15 +440,14 @@ ecore_ipc_server_del(Ecore_Ipc_Server *svr) if (svr->event_count > 0) svr->delete_me = 1; else - { - Ecore_List2 *l; - + { ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE); while (svr->clients) ecore_ipc_client_del((Ecore_Ipc_Client *)svr->clients); ecore_con_server_del(svr->server); servers = _ecore_list2_remove(servers, svr); if (svr->buf) free(svr->buf); + ecore_list_destroy(svr->client_list); free(svr); } return data; @@ -503,7 +504,7 @@ ecore_ipc_server_clients_get(Ecore_Ipc_Server *svr) "ecore_ipc_server_clients_get"); return NULL; } - return svr->clients; + return svr->client_list; } #define SVENC(_member) \ @@ -971,6 +972,7 @@ _ecore_ipc_event_client_add(void *data __UNUSED__, int ev_type __UNUSED__, void cl->max_buf_size = 32 * 1024; ecore_con_client_data_set(cl->client, (void *)cl); svr->clients = _ecore_list2_append(svr->clients, cl); + ecore_list_append(svr->client_list, cl); { Ecore_Ipc_Event_Client_Add *e2; @@ -1001,7 +1003,12 @@ _ecore_ipc_event_client_del(void *data __UNUSED__, int ev_type __UNUSED__, void cl = ecore_con_client_data_get(e->client); { Ecore_Ipc_Event_Client_Del *e2; - + Ecore_Ipc_Server *svr; + + svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client)); + ecore_list_goto(svr->client_list, cl); + ecore_list_remove(svr->client_list); + ecore_list_goto_first(svr->client_list); e2 = calloc(1, sizeof(Ecore_Ipc_Event_Client_Del)); if (e2) { diff --git a/legacy/ecore/src/lib/ecore_ipc/ecore_ipc_private.h b/legacy/ecore/src/lib/ecore_ipc/ecore_ipc_private.h index 8b5f59b55c..2eb6f98a3c 100644 --- a/legacy/ecore/src/lib/ecore_ipc/ecore_ipc_private.h +++ b/legacy/ecore/src/lib/ecore_ipc/ecore_ipc_private.h @@ -59,6 +59,7 @@ struct _Ecore_Ipc_Server ECORE_MAGIC; Ecore_Con_Server *server; Ecore_Ipc_Client *clients; + Ecore_List *client_list; void *data; unsigned char *buf; int buf_size;