forked from enlightenment/efl
ethumb - fix client free issue with pending dbus messages
this fixes T2769 @fix
This commit is contained in:
parent
7b018a9740
commit
44af3cb718
|
@ -110,6 +110,7 @@ struct _Ethumb_Client
|
||||||
Eina_List *pending_add;
|
Eina_List *pending_add;
|
||||||
Eina_List *pending_remove;
|
Eina_List *pending_remove;
|
||||||
Eina_List *pending_gen;
|
Eina_List *pending_gen;
|
||||||
|
Eina_List *dbus_pending;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Ethumb_Client_Die_Cb cb;
|
Ethumb_Client_Die_Cb cb;
|
||||||
|
@ -199,8 +200,11 @@ _ethumb_client_free(Ethumb_Client *client)
|
||||||
{
|
{
|
||||||
void *data;
|
void *data;
|
||||||
Eldbus_Object *obj;
|
Eldbus_Object *obj;
|
||||||
|
Eldbus_Pending *pending;
|
||||||
|
|
||||||
if (client->invalid) return;
|
if (client->invalid) return;
|
||||||
|
EINA_LIST_FREE(client->dbus_pending, pending)
|
||||||
|
eldbus_pending_cancel(pending);
|
||||||
client->invalid = EINA_TRUE;
|
client->invalid = EINA_TRUE;
|
||||||
EINA_LIST_FREE(client->pending_add, data)
|
EINA_LIST_FREE(client->pending_add, data)
|
||||||
{
|
{
|
||||||
|
@ -363,13 +367,14 @@ _ethumb_client_report_connect(Ethumb_Client *client, Eina_Bool success)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ethumb_client_new_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
_ethumb_client_new_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
|
||||||
{
|
{
|
||||||
const char *errname, *errmsg;
|
const char *errname, *errmsg;
|
||||||
const char *opath;
|
const char *opath;
|
||||||
Ethumb_Client *client = data;
|
Ethumb_Client *client = data;
|
||||||
Eldbus_Object *obj;
|
Eldbus_Object *obj;
|
||||||
|
|
||||||
|
client->dbus_pending = eina_list_remove(client->dbus_pending, pending);
|
||||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||||
{
|
{
|
||||||
ERR("Error: %s %s", errname, errmsg);
|
ERR("Error: %s %s", errname, errmsg);
|
||||||
|
@ -404,10 +409,14 @@ static void
|
||||||
_ethumb_client_call_new(Ethumb_Client *client)
|
_ethumb_client_call_new(Ethumb_Client *client)
|
||||||
{
|
{
|
||||||
Eldbus_Message *msg;
|
Eldbus_Message *msg;
|
||||||
|
Eldbus_Pending *pending;
|
||||||
msg = eldbus_message_method_call_new(_ethumb_dbus_bus_name,
|
msg = eldbus_message_method_call_new(_ethumb_dbus_bus_name,
|
||||||
_ethumb_dbus_path,
|
_ethumb_dbus_path,
|
||||||
_ethumb_dbus_interface, "new");
|
_ethumb_dbus_interface, "new");
|
||||||
eldbus_connection_send(client->conn, msg, _ethumb_client_new_cb, client, -1);
|
pending = eldbus_connection_send(client->conn, msg,
|
||||||
|
_ethumb_client_new_cb, client, -1);
|
||||||
|
if (pending)
|
||||||
|
client->dbus_pending = eina_list_append(client->dbus_pending, pending);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -676,10 +685,13 @@ ethumb_client_on_server_die_callback_set(Ethumb_Client *client, Ethumb_Client_Di
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ethumb_client_ethumb_setup_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
_ethumb_client_ethumb_setup_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
|
||||||
{
|
{
|
||||||
const char *errname, *errmsg;
|
const char *errname, *errmsg;
|
||||||
Eina_Bool result = 0;
|
Eina_Bool result = 0;
|
||||||
|
Ethumb_Client *client = data;
|
||||||
|
|
||||||
|
client->dbus_pending = eina_list_remove(client->dbus_pending, pending);
|
||||||
|
|
||||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||||
{
|
{
|
||||||
|
@ -773,6 +785,7 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
||||||
const char *directory, *category;
|
const char *directory, *category;
|
||||||
double video_time, video_start, video_interval;
|
double video_time, video_start, video_interval;
|
||||||
unsigned int video_ntimes, video_fps, document_page;
|
unsigned int video_ntimes, video_fps, document_page;
|
||||||
|
Eldbus_Pending *pending;
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(client);
|
EINA_SAFETY_ON_NULL_RETURN(client);
|
||||||
EINA_SAFETY_ON_FALSE_RETURN(client->connected);
|
EINA_SAFETY_ON_FALSE_RETURN(client->connected);
|
||||||
|
@ -872,8 +885,10 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
||||||
|
|
||||||
eldbus_message_iter_container_close(main_iter, array);
|
eldbus_message_iter_container_close(main_iter, array);
|
||||||
|
|
||||||
eldbus_proxy_send(client->proxy, msg, _ethumb_client_ethumb_setup_cb,
|
pending = eldbus_proxy_send(client->proxy, msg,
|
||||||
client, -1);
|
_ethumb_client_ethumb_setup_cb, client, -1);
|
||||||
|
if (pending)
|
||||||
|
client->dbus_pending = eina_list_append(client->dbus_pending, pending);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue