* Use this function to return the port on which a given client has connected.
*/
EAPI int ecore_con_client_port_get(Ecore_Con_Client *cl);
-/**
- * @brief increment the references on a connection client
- *
- * @param cl The client
- * This increases the references on the given client to keep it alive in
- * memory for longer until all references are release by
- * ecore_con_client_unref().
- * @since 1.3
- */
-EAPI void ecore_con_client_ref(Ecore_Con_Client *cl);
-/**
- * @brief decrement the references on a connection client
- *
- * @param cl The client
- * This decrements the references on the given client and once references hit
- * 0, the client is deleted. ecore_con_client_del() does the same thing as
- * ecore_con_client_unref(). All con clients start with a reference count of
- * 1.
- * @since 1.3
- */
-EAPI void ecore_con_client_unref(Ecore_Con_Client *cl);
+
/**
}
INF("Lost client %s", (cl->ip) ? cl->ip : "");
if (cl->fd_handler)
- {
- ecore_main_fd_handler_del(cl->fd_handler);
- cl->fd_handler = NULL;
- }
- if (cl->ref <= 0)
- _ecore_con_client_free(cl);
+ ecore_main_fd_handler_del(cl->fd_handler);
+
+ cl->fd_handler = NULL;
}
void
ecore_con_event_server_del(svr);
if (svr->fd_handler)
- {
- ecore_main_fd_handler_del(svr->fd_handler);
- svr->fd_handler = NULL;
- }
+ ecore_main_fd_handler_del(svr->fd_handler);
+
+ svr->fd_handler = NULL;
}
#define _ecore_con_server_kill(svr) do { \
ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_del");
return NULL;
}
- ecore_con_client_unref(cl);
- return cl->data;
-}
-EAPI void
-ecore_con_client_ref(Ecore_Con_Client *cl)
-{
- if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT))
- {
- ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_ref");
- return;
- }
- cl->ref++;
-}
-
-EAPI void
-ecore_con_client_unref(Ecore_Con_Client *cl)
-{
- if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT))
- {
- ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_unref");
- return;
- }
- cl->ref--;
- if (cl->ref <= 0)
- _ecore_con_client_kill(cl);
+ _ecore_con_client_kill(cl);
+ return cl->data;
}
EAPI void
return ECORE_CALLBACK_RENEW;
}
cl->host_server = svr;
- cl->ref = 1;
client_addr_len = sizeof(client_addr);
memset(&client_addr, 0, client_addr_len);
_ecore_con_server_free(svr);
}
if (!e->client->event_count)
- ecore_con_client_del(e->client);
+ _ecore_con_client_free(e->client);
}
ecore_con_event_client_del_free(e);
_ecore_con_event_count--;
EINA_LIST_FREE(svr->clients, cl)
ecore_ipc_client_del(cl);
- ecore_con_server_del(svr->server);
+ if (svr->server) ecore_con_server_del(svr->server);
servers = eina_list_remove(servers, svr);
if (svr->buf) free(svr->buf);
"ecore_ipc_client_send");
return 0;
}
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(!cl->client, 0);
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(!ecore_con_client_connected_get(cl->client), 0);
if (size < 0) size = 0;
msg.major = major;
msg.minor = minor;
"ecore_ipc_client_server_get");
return NULL;
}
- return (ecore_con_server_data_get(ecore_con_client_server_get(cl->client)));
+ return cl->svr;
}
/**
cl->delete_me = 1;
if (cl->event_count == 0)
{
- svr = ecore_con_server_data_get(ecore_con_client_server_get(cl->client));
- ecore_con_client_unref(cl->client);
+ svr = cl->svr;
+ if (cl->client) ecore_con_client_del(cl->client);
svr->clients = eina_list_remove(svr->clients, cl);
if (cl->buf) free(cl->buf);
ECORE_MAGIC_SET(cl, ECORE_MAGIC_NONE);
_ecore_ipc_event_client_add(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
{
Ecore_Con_Event_Client_Add *e;
+ Ecore_Ipc_Server *svr;
e = ev;
- if (!eina_list_data_find(servers, ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return ECORE_CALLBACK_RENEW;
+ svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client));
+ if (!eina_list_data_find(servers, svr)) return ECORE_CALLBACK_RENEW;
/* handling code here */
{
Ecore_Ipc_Client *cl;
- Ecore_Ipc_Server *svr;
cl = calloc(1, sizeof(Ecore_Ipc_Client));
if (!cl) return ECORE_CALLBACK_CANCEL;
- svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client));
+ cl->svr = svr;
ECORE_MAGIC_SET(cl, ECORE_MAGIC_IPC_CLIENT);
cl->client = e->client;
- ecore_con_client_ref(cl->client);
cl->max_buf_size = 32 * 1024;
ecore_con_client_data_set(cl->client, (void *)cl);
svr->clients = eina_list_append(svr->clients, cl);
_ecore_ipc_event_client_del(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
{
Ecore_Con_Event_Client_Del *e;
+ Ecore_Ipc_Server *svr;
e = ev;
- if (!eina_list_data_find(servers, ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return ECORE_CALLBACK_RENEW;
+ if (!e->client) return ECORE_CALLBACK_RENEW;
+ svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client));
+ if (!eina_list_data_find(servers, svr)) return ECORE_CALLBACK_RENEW;
/* handling code here */
{
Ecore_Ipc_Client *cl;
cl = ecore_con_client_data_get(e->client);
+ cl->client = NULL;
{
Ecore_Ipc_Event_Client_Del *e2;
- Ecore_Ipc_Server *svr;
- svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client));
svr->client_list = eina_list_remove(svr->client_list, cl);
if (!cl->delete_me)
{
Ecore_Ipc_Server *svr;
svr = ecore_con_server_data_get(e->server);
+ svr->server = NULL;
if (!svr->delete_me)
{
Ecore_Ipc_Event_Server_Del *e2;
_ecore_ipc_event_client_data(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
{
Ecore_Con_Event_Client_Data *e;
+ Ecore_Ipc_Server *svr;
e = ev;
- if (!eina_list_data_find(servers, ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return ECORE_CALLBACK_RENEW;
+ svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client));
+ if (!eina_list_data_find(servers, svr)) return ECORE_CALLBACK_RENEW;
/* handling code here */
{
Ecore_Ipc_Client *cl;
if ((cl->buf_size - offset) >= (s + msg.size))
{
Ecore_Ipc_Event_Client_Data *e2;
- Ecore_Ipc_Server *svr;
int max, max2;
buf = NULL;
- svr = ecore_con_server_data_get(ecore_con_client_server_get(cl->client));
max = svr->max_buf_size;
max2 = cl->max_buf_size;
if ((max >= 0) && (max2 >= 0))