forked from enlightenment/efl
dns async lookup fix - if u del svr before dns lookup done
SVN revision: 56254
This commit is contained in:
parent
d2d54ecad6
commit
dca85251b0
|
@ -1134,12 +1134,23 @@ ecore_con_client_flush(Ecore_Con_Client *cl)
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info)
|
||||||
|
{
|
||||||
|
svr->infos = eina_list_remove(svr->infos, info);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_con_server_free(Ecore_Con_Server *svr)
|
_ecore_con_server_free(Ecore_Con_Server *svr)
|
||||||
{
|
{
|
||||||
Ecore_Con_Client *cl;
|
Ecore_Con_Client *cl;
|
||||||
double t_start, t;
|
double t_start, t;
|
||||||
|
|
||||||
|
while (svr->infos)
|
||||||
|
{
|
||||||
|
ecore_con_info_data_clear(svr->infos->data);
|
||||||
|
svr->infos = eina_list_remove_list(svr->infos, svr->infos);
|
||||||
|
}
|
||||||
if ((!svr->write_buf) && svr->delete_me && (!svr->dead) && (svr->event_count < 1))
|
if ((!svr->write_buf) && svr->delete_me && (!svr->dead) && (svr->event_count < 1))
|
||||||
{
|
{
|
||||||
/* this is a catch-all for cases when a server is not properly killed. */
|
/* this is a catch-all for cases when a server is not properly killed. */
|
||||||
|
|
|
@ -302,9 +302,17 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
cares);
|
cares);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
svr->infos = eina_list_append(svr->infos, cares);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ecore_con_info_data_clear(void *info)
|
||||||
|
{
|
||||||
|
Ecore_Con_CAres *cares = info;
|
||||||
|
cares->data = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ecore_con_info_cares_timeout_cb(void *data __UNUSED__)
|
_ecore_con_info_cares_timeout_cb(void *data __UNUSED__)
|
||||||
{
|
{
|
||||||
|
@ -529,7 +537,11 @@ on_mem_error:
|
||||||
ERR("Not enough memory");
|
ERR("Not enough memory");
|
||||||
|
|
||||||
on_error:
|
on_error:
|
||||||
arg->done_cb(arg->data, NULL);
|
if (arg->data)
|
||||||
|
{
|
||||||
|
ecore_con_server_infos_del(arg->data, arg);
|
||||||
|
arg->done_cb(arg->data, NULL);
|
||||||
|
}
|
||||||
free(arg);
|
free(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -567,6 +579,7 @@ _ecore_con_info_ares_nameinfo(Ecore_Con_CAres *arg,
|
||||||
|
|
||||||
free(arg->result->info.ai_addr);
|
free(arg->result->info.ai_addr);
|
||||||
free(arg->result);
|
free(arg->result);
|
||||||
|
if (arg->data) ecore_con_server_infos_del(arg->data, arg);
|
||||||
free(arg);
|
free(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -306,9 +306,17 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
info_slaves = (CB_Data *)eina_inlist_append(EINA_INLIST_GET(
|
info_slaves = (CB_Data *)eina_inlist_append(EINA_INLIST_GET(
|
||||||
info_slaves),
|
info_slaves),
|
||||||
EINA_INLIST_GET(cbdata));
|
EINA_INLIST_GET(cbdata));
|
||||||
|
svr->infos = eina_list_append(svr->infos, cbdata);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ecore_con_info_data_clear(void *info)
|
||||||
|
{
|
||||||
|
CB_Data *cbdata = info;
|
||||||
|
cbdata->data = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_con_info_readdata(CB_Data *cbdata)
|
_ecore_con_info_readdata(CB_Data *cbdata)
|
||||||
{
|
{
|
||||||
|
@ -347,15 +355,31 @@ _ecore_con_info_readdata(CB_Data *cbdata)
|
||||||
|
|
||||||
recv->info.ai_next = NULL;
|
recv->info.ai_next = NULL;
|
||||||
|
|
||||||
cbdata->cb_done(cbdata->data, recv);
|
if (cbdata->data)
|
||||||
|
{
|
||||||
|
cbdata->cb_done(cbdata->data, recv);
|
||||||
|
ecore_con_server_infos_del(cbdata->data, cbdata);
|
||||||
|
}
|
||||||
|
|
||||||
free(torecv);
|
free(torecv);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cbdata->cb_done(cbdata->data, NULL);
|
{
|
||||||
|
if (cbdata->data)
|
||||||
|
{
|
||||||
|
cbdata->cb_done(cbdata->data, NULL);
|
||||||
|
ecore_con_server_infos_del(cbdata->data, cbdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cbdata->cb_done(cbdata->data, NULL);
|
{
|
||||||
|
if (cbdata->data)
|
||||||
|
{
|
||||||
|
cbdata->cb_done(cbdata->data, NULL);
|
||||||
|
ecore_con_server_infos_del(cbdata->data, cbdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cbdata->cb_done = NULL;
|
cbdata->cb_done = NULL;
|
||||||
}
|
}
|
||||||
|
@ -368,6 +392,7 @@ _ecore_con_info_slave_free(CB_Data *cbdata)
|
||||||
ecore_main_fd_handler_del(cbdata->fdh);
|
ecore_main_fd_handler_del(cbdata->fdh);
|
||||||
ecore_event_handler_del(cbdata->handler);
|
ecore_event_handler_del(cbdata->handler);
|
||||||
close(ecore_main_fd_handler_fd_get(cbdata->fdh));
|
close(ecore_main_fd_handler_fd_get(cbdata->fdh));
|
||||||
|
if (cbdata->data) ecore_con_server_infos_del(cbdata->data, cbdata);
|
||||||
free(cbdata);
|
free(cbdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,8 +410,12 @@ _ecore_con_info_data_handler(void *data,
|
||||||
_ecore_con_info_readdata(cbdata);
|
_ecore_con_info_readdata(cbdata);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cbdata->cb_done(cbdata->data, NULL);
|
if (cbdata->data)
|
||||||
cbdata->cb_done = NULL;
|
{
|
||||||
|
cbdata->cb_done(cbdata->data, NULL);
|
||||||
|
cbdata->cb_done = NULL;
|
||||||
|
ecore_con_server_infos_del(cbdata->data, cbdata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,7 @@ struct _Ecore_Con_Server
|
||||||
int write_buf_size;
|
int write_buf_size;
|
||||||
int write_buf_offset;
|
int write_buf_offset;
|
||||||
unsigned char *write_buf;
|
unsigned char *write_buf;
|
||||||
|
Eina_List *infos;
|
||||||
int event_count;
|
int event_count;
|
||||||
int client_limit;
|
int client_limit;
|
||||||
pid_t ppid;
|
pid_t ppid;
|
||||||
|
@ -197,6 +198,9 @@ struct _Ecore_Con_Lookup
|
||||||
const void *data;
|
const void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* from ecore_con.c */
|
||||||
|
void ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info);
|
||||||
|
|
||||||
/* from ecore_local.c */
|
/* from ecore_local.c */
|
||||||
int ecore_con_local_init(void);
|
int ecore_con_local_init(void);
|
||||||
int ecore_con_local_shutdown(void);
|
int ecore_con_local_shutdown(void);
|
||||||
|
@ -230,6 +234,8 @@ int ecore_con_info_udp_listen(Ecore_Con_Server *svr,
|
||||||
int ecore_con_info_mcast_listen(Ecore_Con_Server *svr,
|
int ecore_con_info_mcast_listen(Ecore_Con_Server *svr,
|
||||||
Ecore_Con_Info_Cb done_cb,
|
Ecore_Con_Info_Cb done_cb,
|
||||||
void *data);
|
void *data);
|
||||||
|
void ecore_con_info_data_clear(void *info);
|
||||||
|
|
||||||
/* from ecore_con_ssl.c */
|
/* from ecore_con_ssl.c */
|
||||||
Ecore_Con_Ssl_Error ecore_con_ssl_init(void);
|
Ecore_Con_Ssl_Error ecore_con_ssl_init(void);
|
||||||
Ecore_Con_Ssl_Error ecore_con_ssl_shutdown(void);
|
Ecore_Con_Ssl_Error ecore_con_ssl_shutdown(void);
|
||||||
|
|
Loading…
Reference in New Issue