probably last patch for today...
Cheers,
--
Morten
:wq
Index: ecore_ipc.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc.c,v
retrieving revision 1.23
diff -u -r1.23 ecore_ipc.c
--- ecore_ipc.c 23 Sep 2005 06:28:05 -0000 1.23
+++ ecore_ipc.c 2 Jan 2006 04:26:50 -0000
@@ -228,9 +228,12 @@
int ECORE_IPC_EVENT_SERVER_DATA = 0;
static int init_count = 0;
-static Ecore_Ipc_Server *servers = NULL;
+static Ecore_List *servers = NULL;
static Ecore_Event_Handler *handler[6];
+static void *_ecore_ipc_server_del(void *data);
+static void *_ecore_ipc_client_del(void *data);
+
/**
* @defgroup Ecore_IPC_Library_Group IPC Library Functions
*
@@ -271,6 +274,10 @@
_ecore_ipc_event_client_data, NULL);
handler[i++] = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA,
_ecore_ipc_event_server_data, NULL);
+
+ servers = ecore_list_new();
+ ecore_list_set_free_cb(servers, ECORE_FREE_CB(_ecore_ipc_server_del));
+
return init_count;
}
@@ -287,7 +294,7 @@
if (--init_count != 0) return init_count;
- while (servers) ecore_ipc_server_del(servers);
+ ecore_list_destroy(servers);
for (i = 0; i < 6; i++)
ecore_event_handler_del(handler[i]);
@@ -350,7 +357,7 @@
return NULL;
}
svr->data = (void *)data;
- servers = _ecore_list2_append(servers, svr);
+ ecore_list_append(servers, (void *)svr);
ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER);
return svr;
}
@@ -405,7 +412,7 @@
return NULL;
}
svr->data = (void *)data;
- servers = _ecore_list2_append(servers, svr);
+ ecore_list_append(servers, (void *)svr);
ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER);
return svr;
}
@@ -419,7 +426,15 @@
void *
ecore_ipc_server_del(Ecore_Ipc_Server *svr)
{
- void *data;
+ ecore_list_goto(servers, (void *)svr);
+ return _ecore_ipc_server_del(ecore_list_remove(servers));
+}
+
+static void *
+_ecore_ipc_server_del(void *data)
+{
+ Ecore_Ipc_Server *svr;
+ svr = (Ecore_Ipc_Server *)data;
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
{
@@ -429,9 +444,10 @@
}
ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE);
data = svr->data;
- while (svr->clients) ecore_ipc_client_del((Ecore_Ipc_Client *)svr->clients);
+ ecore_list_destroy(svr->clients);
+
ecore_con_server_del(svr->server);
- servers = _ecore_list2_remove(servers, svr);
+
if (svr->buf) free(svr->buf);
free(svr);
return data;
@@ -724,8 +740,17 @@
void *
ecore_ipc_client_del(Ecore_Ipc_Client *cl)
{
- void *data;
+ return _ecore_ipc_client_del((void *)cl);
+}
+
+static void *
+_ecore_ipc_client_del(void *data)
+{
+ Ecore_Ipc_Client *cl;
Ecore_Ipc_Server *svr;
+
+ cl = (Ecore_Ipc_Client *)data;
+ data = cl->data;
if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_IPC_CLIENT))
{
@@ -733,11 +758,12 @@
"ecore_ipc_client_del");
return NULL;
}
+
ECORE_MAGIC_SET(cl, ECORE_MAGIC_NONE);
- data = cl->data;
svr = ecore_con_server_data_get(ecore_con_client_server_get(cl->client));
ecore_con_client_del(cl->client);
- svr->clients = _ecore_list2_remove(svr->clients, cl);
+ ecore_list_goto(svr->clients, (void *)cl);
+ ecore_list_remove(svr->clients);
if (cl->buf) free(cl->buf);
free(cl);
return data;
@@ -796,8 +822,8 @@
{
Ecore_Con_Event_Client_Add *e;
- e = ev;
- if (!_ecore_list2_find(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1;
+ e = (Ecore_Con_Event_Client_Add *)ev;
+ if (!ecore_list_goto(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1;
/* handling code here */
{
Ecore_Ipc_Client *cl;
@@ -809,7 +835,12 @@
ECORE_MAGIC_SET(cl, ECORE_MAGIC_IPC_CLIENT);
cl->client = e->client;
ecore_con_client_data_set(cl->client, (void *)cl);
- svr->clients = _ecore_list2_append(svr->clients, cl);
+ if (!svr->clients)
+ {
+ svr->clients = ecore_list_new();
+ ecore_list_set_free_cb(svr->clients,
ECORE_FREE_CB(_ecore_ipc_client_del));
+ }
+ ecore_list_append(svr->clients, (void *)cl);
{
Ecore_Ipc_Event_Client_Add *e2;
@@ -829,8 +860,8 @@
{
Ecore_Con_Event_Client_Del *e;
- e = ev;
- if (!_ecore_list2_find(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1;
+ e = (Ecore_Con_Event_Client_Del *)ev;
+ if (!ecore_list_goto(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1;
/* handling code here */
{
Ecore_Ipc_Client *cl;
@@ -855,8 +886,8 @@
{
Ecore_Con_Event_Server_Add *e;
- e = ev;
- if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server)))
return 1;
+ e = (Ecore_Con_Event_Server_Add *)ev;
+ if (!ecore_list_goto(servers, ecore_con_server_data_get(e->server))) return
1;
/* handling code here */
{
Ecore_Ipc_Server *svr;
@@ -881,8 +912,8 @@
{
Ecore_Con_Event_Server_Del *e;
- e = ev;
- if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server)))
return 1;
+ e = (Ecore_Con_Event_Server_Del *)ev;
+ if (!ecore_list_goto(servers, ecore_con_server_data_get(e->server))) return
1;
/* handling code here */
{
Ecore_Ipc_Server *svr;
@@ -948,8 +979,8 @@
{
Ecore_Con_Event_Client_Data *e;
- e = ev;
- if (!_ecore_list2_find(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1;
+ e = (Ecore_Con_Event_Client_Data *)ev;
+ if (!ecore_list_goto(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1;
/* handling code here */
{
Ecore_Ipc_Client *cl;
@@ -1121,8 +1152,8 @@
{
Ecore_Con_Event_Server_Data *e;
- e = ev;
- if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server)))
return 1;
+ e = (Ecore_Con_Event_Server_Data *)ev;
+ if (!ecore_list_goto(servers, ecore_con_server_data_get(e->server))) return
1;
/* handling code here */
{
Ecore_Ipc_Server *svr;
Index: ecore_ipc_private.h
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc_private.h,v
retrieving revision 1.7
diff -u -r1.7 ecore_ipc_private.h
--- ecore_ipc_private.h 23 Sep 2005 06:28:05 -0000 1.7
+++ ecore_ipc_private.h 2 Jan 2006 04:26:50 -0000
@@ -37,7 +37,6 @@
struct _Ecore_Ipc_Client
{
- Ecore_List __list_data;
ECORE_MAGIC;
Ecore_Con_Client *client;
void *data;
@@ -51,13 +50,12 @@
struct _Ecore_Ipc_Server
{
- Ecore_List __list_data;
ECORE_MAGIC;
Ecore_Con_Server *server;
- Ecore_Ipc_Client *clients;
- void *data;
- unsigned char *buf;
- int buf_size;
+ Ecore_List *clients;
+ void *data;
+ unsigned char *buf;
+ int buf_size;
struct {
Ecore_Ipc_Msg_Head i, o;