forked from enlightenment/enlightenment
e/connman: use stringshare for object path and fix
leaks SVN revision: 76033
This commit is contained in:
parent
90d02d48da
commit
0bb82b9d1b
|
@ -62,8 +62,17 @@ static enum Connman_Service_Type str_to_type(const char *s)
|
||||||
|
|
||||||
static void _connman_object_init(struct Connman_Object *obj, const char *path)
|
static void _connman_object_init(struct Connman_Object *obj, const char *path)
|
||||||
{
|
{
|
||||||
EINA_SAFETY_ON_NULL_RETURN(path);
|
obj->path = eina_stringshare_add(path);
|
||||||
obj->path = path;
|
}
|
||||||
|
|
||||||
|
static void _connman_object_clear(struct Connman_Object *obj)
|
||||||
|
{
|
||||||
|
E_DBus_Signal_Handler *h;
|
||||||
|
|
||||||
|
EINA_LIST_FREE(obj->handlers, h)
|
||||||
|
e_dbus_signal_handler_del(conn, h);
|
||||||
|
|
||||||
|
eina_stringshare_del(obj->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _service_parse_prop_changed(struct Connman_Service *cs,
|
static void _service_parse_prop_changed(struct Connman_Service *cs,
|
||||||
|
@ -146,12 +155,13 @@ static void _service_prop_changed(void *data, DBusMessage *msg)
|
||||||
|
|
||||||
static void _service_free(struct Connman_Service *cs)
|
static void _service_free(struct Connman_Service *cs)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
if (!cs)
|
||||||
|
return;
|
||||||
EINA_LIST_FREE(cs->obj.handlers, l)
|
|
||||||
e_dbus_signal_handler_del(conn, l->data);
|
|
||||||
|
|
||||||
free(cs->name);
|
free(cs->name);
|
||||||
|
_connman_object_clear(&cs->obj);
|
||||||
|
|
||||||
|
free(cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct Connman_Service *_service_new(const char *path, DBusMessageIter *props)
|
static struct Connman_Service *_service_new(const char *path, DBusMessageIter *props)
|
||||||
|
@ -159,21 +169,17 @@ static struct Connman_Service *_service_new(const char *path, DBusMessageIter *p
|
||||||
struct Connman_Service *cs;
|
struct Connman_Service *cs;
|
||||||
E_DBus_Signal_Handler *h;
|
E_DBus_Signal_Handler *h;
|
||||||
|
|
||||||
size_t pathlen;
|
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
|
||||||
pathlen = strlen(path);
|
|
||||||
|
|
||||||
cs = calloc(1, sizeof(*cs) + pathlen + 1);
|
cs = calloc(1, sizeof(*cs));
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cs, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(cs, NULL);
|
||||||
|
|
||||||
memcpy(cs + sizeof(*cs), path, 1);
|
|
||||||
_connman_object_init(&cs->obj, path);
|
_connman_object_init(&cs->obj, path);
|
||||||
|
|
||||||
h = e_dbus_signal_handler_add(conn, bus_owner,
|
h = e_dbus_signal_handler_add(conn, bus_owner,
|
||||||
path, CONNMAN_SERVICE_IFACE, "PropertyChanged",
|
path, CONNMAN_SERVICE_IFACE, "PropertyChanged",
|
||||||
_service_prop_changed, cs);
|
_service_prop_changed, cs);
|
||||||
cs->obj.handlers = eina_list_append(cs->obj.handlers, h);
|
cs->obj.handlers = eina_list_append(cs->obj.handlers, h);
|
||||||
|
|
||||||
_service_prop_dict_changed(cs, props);
|
_service_prop_dict_changed(cs, props);
|
||||||
return cs;
|
return cs;
|
||||||
|
@ -315,7 +321,8 @@ static void _manager_get_prop_cb(void *data, DBusMessage *reply,
|
||||||
|
|
||||||
static void _manager_free(struct Connman_Manager *cm)
|
static void _manager_free(struct Connman_Manager *cm)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
if (!cm)
|
||||||
|
return;
|
||||||
|
|
||||||
while (cm->services)
|
while (cm->services)
|
||||||
{
|
{
|
||||||
|
@ -325,9 +332,6 @@ static void _manager_free(struct Connman_Manager *cm)
|
||||||
_service_free(cs);
|
_service_free(cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
EINA_LIST_FREE(cm->obj.handlers, l)
|
|
||||||
e_dbus_signal_handler_del(conn, l->data);
|
|
||||||
|
|
||||||
if (cm->pending.get_services)
|
if (cm->pending.get_services)
|
||||||
{
|
{
|
||||||
dbus_pending_call_cancel(cm->pending.get_services);
|
dbus_pending_call_cancel(cm->pending.get_services);
|
||||||
|
@ -339,6 +343,9 @@ static void _manager_free(struct Connman_Manager *cm)
|
||||||
dbus_pending_call_cancel(cm->pending.get_properties);
|
dbus_pending_call_cancel(cm->pending.get_properties);
|
||||||
cm->pending.get_properties = NULL;
|
cm->pending.get_properties = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_connman_object_clear(&cm->obj);
|
||||||
|
free(cm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct Connman_Manager *_manager_new(void)
|
static struct Connman_Manager *_manager_new(void)
|
||||||
|
@ -359,21 +366,20 @@ static struct Connman_Manager *_manager_new(void)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cm = calloc(1, sizeof(*cm) + 2);
|
cm = calloc(1, sizeof(*cm));
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cm, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(cm, NULL);
|
||||||
|
|
||||||
memcpy(cm + sizeof(*cm), path, 1);
|
|
||||||
_connman_object_init(&cm->obj, path);
|
_connman_object_init(&cm->obj, path);
|
||||||
|
|
||||||
h = e_dbus_signal_handler_add(conn, bus_owner,
|
h = e_dbus_signal_handler_add(conn, bus_owner,
|
||||||
path, CONNMAN_MANAGER_IFACE, "PropertyChanged",
|
path, CONNMAN_MANAGER_IFACE, "PropertyChanged",
|
||||||
_manager_prop_changed, cm);
|
_manager_prop_changed, cm);
|
||||||
cm->obj.handlers = eina_list_append(cm->obj.handlers, h);
|
cm->obj.handlers = eina_list_append(cm->obj.handlers, h);
|
||||||
|
|
||||||
h = e_dbus_signal_handler_add(conn, bus_owner,
|
h = e_dbus_signal_handler_add(conn, bus_owner,
|
||||||
path, CONNMAN_MANAGER_IFACE, "ServicesChanged",
|
path, CONNMAN_MANAGER_IFACE, "ServicesChanged",
|
||||||
_manager_services_changed, cm);
|
_manager_services_changed, cm);
|
||||||
cm->obj.handlers = eina_list_append(cm->obj.handlers, h);
|
cm->obj.handlers = eina_list_append(cm->obj.handlers, h);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PropertyChanged signal in service's path is guaranteed to arrive only
|
* PropertyChanged signal in service's path is guaranteed to arrive only
|
||||||
|
|
Loading…
Reference in New Issue