forked from enlightenment/efl
Fix some memory handling issues:
* Ethumb_Client now calls free_data on clear() and queue_remove(). * disconnect() doesn't call clear() anymore. * disconnect() free pending calls correctly. SVN revision: 41377
This commit is contained in:
parent
658d39dac8
commit
ffe70c5e07
|
@ -476,30 +476,51 @@ err:
|
||||||
EAPI void
|
EAPI void
|
||||||
ethumb_client_disconnect(Ethumb_Client *client)
|
ethumb_client_disconnect(Ethumb_Client *client)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
void *data;
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(client);
|
EINA_SAFETY_ON_NULL_RETURN(client);
|
||||||
|
|
||||||
if (!client->connected)
|
if (!client->connected)
|
||||||
goto end_connection;
|
goto end_connection;
|
||||||
|
|
||||||
ethumb_client_queue_clear(client);
|
EINA_LIST_FREE(client->pending_add, data)
|
||||||
l = client->pending_remove;
|
|
||||||
while (l)
|
|
||||||
{
|
{
|
||||||
struct _ethumb_pending_remove *pending = l->data;
|
struct _ethumb_pending_add *pending = data;
|
||||||
client->pending_remove = eina_list_remove_list(client->pending_remove, l);
|
eina_stringshare_del(pending->file);
|
||||||
|
eina_stringshare_del(pending->key);
|
||||||
|
eina_stringshare_del(pending->thumb);
|
||||||
|
eina_stringshare_del(pending->thumb_key);
|
||||||
|
dbus_pending_call_cancel(pending->pending_call);
|
||||||
|
dbus_pending_call_unref(pending->pending_call);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
|
free(pending);
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FREE(client->pending_gen, data)
|
||||||
|
{
|
||||||
|
struct _ethumb_pending_gen *pending = data;
|
||||||
|
eina_stringshare_del(pending->file);
|
||||||
|
eina_stringshare_del(pending->key);
|
||||||
|
eina_stringshare_del(pending->thumb);
|
||||||
|
eina_stringshare_del(pending->thumb_key);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
|
free(pending);
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FREE(client->pending_remove, data)
|
||||||
|
{
|
||||||
|
struct _ethumb_pending_remove *pending = data;
|
||||||
dbus_pending_call_cancel(pending->pending_call);
|
dbus_pending_call_cancel(pending->pending_call);
|
||||||
dbus_pending_call_unref(pending->pending_call);
|
dbus_pending_call_unref(pending->pending_call);
|
||||||
free(pending);
|
free(pending);
|
||||||
}
|
}
|
||||||
|
|
||||||
l = client->pending_gen;
|
if (client->pending_clear)
|
||||||
while (l)
|
|
||||||
{
|
{
|
||||||
struct _ethumb_pending_gen *pending = l->data;
|
dbus_pending_call_cancel(client->pending_clear);
|
||||||
client->pending_gen = eina_list_remove_list(client->pending_gen, l);
|
dbus_pending_call_unref(client->pending_clear);
|
||||||
free(pending);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
end_connection:
|
end_connection:
|
||||||
|
@ -948,6 +969,8 @@ ethumb_client_queue_remove(Ethumb_Client *client, int id, void (*queue_remove_cb
|
||||||
eina_stringshare_del(pending->thumb_key);
|
eina_stringshare_del(pending->thumb_key);
|
||||||
dbus_pending_call_cancel(pending->pending_call);
|
dbus_pending_call_cancel(pending->pending_call);
|
||||||
dbus_pending_call_unref(pending->pending_call);
|
dbus_pending_call_unref(pending->pending_call);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
free(pending);
|
free(pending);
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -970,6 +993,8 @@ ethumb_client_queue_remove(Ethumb_Client *client, int id, void (*queue_remove_cb
|
||||||
eina_stringshare_del(pending->key);
|
eina_stringshare_del(pending->key);
|
||||||
eina_stringshare_del(pending->thumb);
|
eina_stringshare_del(pending->thumb);
|
||||||
eina_stringshare_del(pending->thumb_key);
|
eina_stringshare_del(pending->thumb_key);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
free(pending);
|
free(pending);
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -991,11 +1016,38 @@ EAPI void
|
||||||
ethumb_client_queue_clear(Ethumb_Client *client)
|
ethumb_client_queue_clear(Ethumb_Client *client)
|
||||||
{
|
{
|
||||||
DBusMessage *msg;
|
DBusMessage *msg;
|
||||||
|
void *data;
|
||||||
EINA_SAFETY_ON_NULL_RETURN(client);
|
EINA_SAFETY_ON_NULL_RETURN(client);
|
||||||
|
|
||||||
if (client->pending_clear)
|
if (client->pending_clear)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
EINA_LIST_FREE(client->pending_add, data)
|
||||||
|
{
|
||||||
|
struct _ethumb_pending_add *pending = data;
|
||||||
|
eina_stringshare_del(pending->file);
|
||||||
|
eina_stringshare_del(pending->key);
|
||||||
|
eina_stringshare_del(pending->thumb);
|
||||||
|
eina_stringshare_del(pending->thumb_key);
|
||||||
|
dbus_pending_call_cancel(pending->pending_call);
|
||||||
|
dbus_pending_call_unref(pending->pending_call);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
|
free(pending);
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FREE(client->pending_gen, data)
|
||||||
|
{
|
||||||
|
struct _ethumb_pending_gen *pending = data;
|
||||||
|
eina_stringshare_del(pending->file);
|
||||||
|
eina_stringshare_del(pending->key);
|
||||||
|
eina_stringshare_del(pending->thumb);
|
||||||
|
eina_stringshare_del(pending->thumb_key);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
|
free(pending);
|
||||||
|
}
|
||||||
|
|
||||||
msg = dbus_message_new_method_call(_ethumb_dbus_bus_name,
|
msg = dbus_message_new_method_call(_ethumb_dbus_bus_name,
|
||||||
client->object_path,
|
client->object_path,
|
||||||
_ethumb_dbus_objects_interface,
|
_ethumb_dbus_objects_interface,
|
||||||
|
@ -1004,6 +1056,7 @@ ethumb_client_queue_clear(Ethumb_Client *client)
|
||||||
client->pending_clear = e_dbus_message_send(client->conn, msg,
|
client->pending_clear = e_dbus_message_send(client->conn, msg,
|
||||||
_ethumb_client_queue_clear_cb,
|
_ethumb_client_queue_clear_cb,
|
||||||
-1, client);
|
-1, client);
|
||||||
|
|
||||||
dbus_message_unref(msg);
|
dbus_message_unref(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue