fix ecore-con tracking of event count lists for clients!!! thanks

valgrind!



SVN revision: 65647
This commit is contained in:
Carsten Haitzler 2011-11-28 12:06:50 +00:00
parent 03996e4dac
commit d3e45fc7a7
1 changed files with 19 additions and 16 deletions

View File

@ -2365,15 +2365,15 @@ _ecore_con_event_client_add_free(Ecore_Con_Server *svr,
e = ev; e = ev;
if (e->client) if (e->client)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e); e->client->event_count = eina_list_remove(e->client->event_count, e);
if ((!e->client->event_count) && (e->client->delete_me))
ecore_con_client_del(e->client);
if (e->client->host_server) if (e->client->host_server)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev); e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
if ((!svr->event_count) && (svr->delete_me)) if ((!svr->event_count) && (svr->delete_me))
_ecore_con_server_free(svr); _ecore_con_server_free(svr);
} }
if ((!e->client->event_count) && (e->client->delete_me))
ecore_con_client_del(e->client);
} }
ecore_con_event_client_add_free(e); ecore_con_event_client_add_free(e);
@ -2391,15 +2391,15 @@ _ecore_con_event_client_del_free(Ecore_Con_Server *svr,
e = ev; e = ev;
if (e->client) if (e->client)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e); e->client->event_count = eina_list_remove(e->client->event_count, e);
if ((!e->client->event_count) && (e->client->delete_me))
ecore_con_client_del(e->client);
if (e->client->host_server) if (e->client->host_server)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev); e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
if ((!svr->event_count) && (svr->delete_me)) if ((!svr->event_count) && (svr->delete_me))
_ecore_con_server_free(svr); _ecore_con_server_free(svr);
} }
if ((!e->client->event_count) && (e->client->delete_me))
ecore_con_client_del(e->client);
} }
ecore_con_event_client_del_free(e); ecore_con_event_client_del_free(e);
_ecore_con_event_count--; _ecore_con_event_count--;
@ -2413,18 +2413,18 @@ _ecore_con_event_client_write_free(Ecore_Con_Server *svr,
{ {
if (e->client) if (e->client)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e); e->client->event_count = eina_list_remove(e->client->event_count, e);
if (((!e->client->event_count) && (e->client->delete_me)) ||
((e->client->host_server &&
((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP ||
(e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST))))
ecore_con_client_del(e->client);
if (e->client->host_server) if (e->client->host_server)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e); e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e);
if ((!svr->event_count) && (svr->delete_me)) if ((!svr->event_count) && (svr->delete_me))
_ecore_con_server_free(svr); _ecore_con_server_free(svr);
} }
if (((!e->client->event_count) && (e->client->delete_me)) ||
((e->client->host_server &&
((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP ||
(e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST))))
ecore_con_client_del(e->client);
} }
ecore_con_event_client_write_free(e); ecore_con_event_client_write_free(e);
_ecore_con_event_count--; _ecore_con_event_count--;
@ -2441,15 +2441,18 @@ _ecore_con_event_client_data_free(Ecore_Con_Server *svr,
e = ev; e = ev;
if (e->client) if (e->client)
{ {
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e); e->client->event_count = eina_list_remove(e->client->event_count, e);
if (e->client->host_server)
{
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
}
if ((!svr->event_count) && (svr->delete_me))
_ecore_con_server_free(svr);
if (((!e->client->event_count) && (e->client->delete_me)) || if (((!e->client->event_count) && (e->client->delete_me)) ||
((e->client->host_server && ((e->client->host_server &&
((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || ((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP ||
(e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) (e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST))))
ecore_con_client_del(e->client); ecore_con_client_del(e->client);
e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
if ((!svr->event_count) && (svr->delete_me))
_ecore_con_server_free(svr);
} }
free(e->data); free(e->data);
ecore_con_event_client_data_free(e); ecore_con_event_client_data_free(e);