forked from enlightenment/enlightenment
bz5 - ensure we unref bluez dbus objects to free them
This commit is contained in:
parent
a0fc5a7c30
commit
acee84c8eb
|
@ -13,6 +13,7 @@ typedef struct _Obj Obj;
|
|||
|
||||
struct _Obj {
|
||||
//// internal object data
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Proxy *proxy;
|
||||
Eldbus_Proxy *prop_proxy;
|
||||
Eldbus_Signal_Handler *prop_sig;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "e.h"
|
||||
|
||||
static Eldbus_Service_Interface *agent_iface = NULL;
|
||||
static Eldbus_Object *agent_obj = NULL;
|
||||
static Eldbus_Proxy *agent_proxy = NULL;
|
||||
static void (*fn_release) (void) = NULL;
|
||||
static void (*fn_cancel) (void) = NULL;
|
||||
|
@ -149,6 +150,11 @@ cb_unregister(void *data EINA_UNUSED, const Eldbus_Message *msg,
|
|||
eldbus_proxy_unref(agent_proxy);
|
||||
agent_proxy = NULL;
|
||||
}
|
||||
if (agent_obj)
|
||||
{
|
||||
eldbus_object_unref(agent_obj);
|
||||
agent_obj = NULL;
|
||||
}
|
||||
if (agent_iface)
|
||||
{
|
||||
eldbus_service_object_unregister(agent_iface);
|
||||
|
@ -266,10 +272,8 @@ bz_agent_msg_u32_add(Eldbus_Message *msg, unsigned int u32)
|
|||
void
|
||||
bz_agent_init(void)
|
||||
{
|
||||
Eldbus_Object *obj;
|
||||
|
||||
obj = eldbus_object_get(bz_conn, "org.bluez", "/org/bluez");
|
||||
agent_proxy = eldbus_proxy_get(obj, "org.bluez.AgentManager1");
|
||||
agent_obj = eldbus_object_get(bz_conn, "org.bluez", "/org/bluez");
|
||||
agent_proxy = eldbus_proxy_get(agent_obj, "org.bluez.AgentManager1");
|
||||
agent_iface = eldbus_service_interface_register
|
||||
(bz_conn, "/org/enlightenment/bluez5/agent", &agent_desc);
|
||||
if (agent_proxy)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "bz.h"
|
||||
#include "e_mod_main.h"
|
||||
|
||||
static Eldbus_Object *objman_obj = NULL;
|
||||
static Eldbus_Proxy *objman_proxy = NULL;
|
||||
static Eldbus_Signal_Handler *sig_ifadd = NULL;
|
||||
static Eldbus_Signal_Handler *sig_ifdel = NULL;
|
||||
|
@ -295,18 +296,16 @@ cb_obj_prop_changed(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSE
|
|||
Obj *
|
||||
bz_obj_add(const char *path)
|
||||
{
|
||||
Eldbus_Object *obj;
|
||||
|
||||
Obj *o = calloc(1, sizeof(Obj));
|
||||
o->ref = 1;
|
||||
o->path = eina_stringshare_add(path);
|
||||
obj = eldbus_object_get(bz_conn, "org.bluez", o->path);
|
||||
o->obj = eldbus_object_get(bz_conn, "org.bluez", o->path);
|
||||
o->type = BZ_OBJ_UNKNOWN;
|
||||
o->in_table = EINA_TRUE;
|
||||
eina_hash_add(obj_table, o->path, o);
|
||||
if (!strcmp(o->path, "/org/bluez"))
|
||||
{
|
||||
o->proxy = eldbus_proxy_get(obj, "org.bluez.AgentManager1");
|
||||
o->proxy = eldbus_proxy_get(o->obj, "org.bluez.AgentManager1");
|
||||
o->type = BZ_OBJ_BLUEZ;
|
||||
o->add_called = EINA_TRUE;
|
||||
bz_obj_ref(o);
|
||||
|
@ -317,12 +316,12 @@ bz_obj_add(const char *path)
|
|||
// all devices are /org/bluez/XXX/dev_XXX so look for /dev_
|
||||
else if (strstr(o->path, "/dev_"))
|
||||
{
|
||||
o->proxy = eldbus_proxy_get(obj, "org.bluez.Device1");
|
||||
o->proxy = eldbus_proxy_get(o->obj, "org.bluez.Device1");
|
||||
o->type = BZ_OBJ_DEVICE;
|
||||
if (o->proxy)
|
||||
{
|
||||
eldbus_proxy_property_get_all(o->proxy, cb_obj_prop, o);
|
||||
o->prop_proxy = eldbus_proxy_get(obj,
|
||||
o->prop_proxy = eldbus_proxy_get(o->obj,
|
||||
"org.freedesktop.DBus.Properties");
|
||||
if (o->prop_proxy)
|
||||
o->prop_sig = eldbus_proxy_signal_handler_add(o->prop_proxy,
|
||||
|
@ -334,12 +333,12 @@ bz_obj_add(const char *path)
|
|||
// all dadapters begin with /org/bluez/
|
||||
else if (!strncmp(o->path, "/org/bluez/", 11))
|
||||
{
|
||||
o->proxy = eldbus_proxy_get(obj, "org.bluez.Adapter1");
|
||||
o->proxy = eldbus_proxy_get(o->obj, "org.bluez.Adapter1");
|
||||
o->type = BZ_OBJ_ADAPTER;
|
||||
if (o->proxy)
|
||||
{
|
||||
eldbus_proxy_property_get_all(o->proxy, cb_obj_prop, o);
|
||||
o->prop_proxy = eldbus_proxy_get(obj,
|
||||
o->prop_proxy = eldbus_proxy_get(o->obj,
|
||||
"org.freedesktop.DBus.Properties");
|
||||
if (o->prop_proxy)
|
||||
o->prop_sig = eldbus_proxy_signal_handler_add(o->prop_proxy,
|
||||
|
@ -742,16 +741,6 @@ bz_obj_unref(Obj *o)
|
|||
eldbus_signal_handler_del(o->prop_sig);
|
||||
o->prop_sig = NULL;
|
||||
}
|
||||
if (o->proxy)
|
||||
{
|
||||
eldbus_proxy_unref(o->proxy);
|
||||
o->proxy = NULL;
|
||||
}
|
||||
if (o->prop_proxy)
|
||||
{
|
||||
eldbus_proxy_unref(o->prop_proxy);
|
||||
o->prop_proxy = NULL;
|
||||
}
|
||||
if (o->path)
|
||||
{
|
||||
eina_stringshare_del(o->path);
|
||||
|
@ -787,6 +776,21 @@ bz_obj_unref(Obj *o)
|
|||
ecore_exe_free(o->ping_exe);
|
||||
o->ping_exe = NULL;
|
||||
}
|
||||
if (o->proxy)
|
||||
{
|
||||
eldbus_proxy_unref(o->proxy);
|
||||
o->proxy = NULL;
|
||||
}
|
||||
if (o->prop_proxy)
|
||||
{
|
||||
eldbus_proxy_unref(o->prop_proxy);
|
||||
o->prop_proxy = NULL;
|
||||
}
|
||||
if (o->obj)
|
||||
{
|
||||
eldbus_object_unref(o->obj);
|
||||
o->obj = NULL;
|
||||
}
|
||||
free(o);
|
||||
}
|
||||
|
||||
|
@ -894,12 +898,10 @@ _obj_hash_free(Obj *o)
|
|||
void
|
||||
bz_obj_init(void)
|
||||
{
|
||||
Eldbus_Object *obj;
|
||||
|
||||
obj_table = eina_hash_string_superfast_new((void *)_obj_hash_free);
|
||||
|
||||
obj = eldbus_object_get(bz_conn, "org.bluez", "/");
|
||||
objman_proxy = eldbus_proxy_get(obj, "org.freedesktop.DBus.ObjectManager");
|
||||
objman_obj = eldbus_object_get(bz_conn, "org.bluez", "/");
|
||||
objman_proxy = eldbus_proxy_get(objman_obj, "org.freedesktop.DBus.ObjectManager");
|
||||
sig_ifadd = eldbus_proxy_signal_handler_add(objman_proxy, "InterfacesAdded",
|
||||
cb_obj_add, NULL);
|
||||
sig_ifdel = eldbus_proxy_signal_handler_add(objman_proxy, "InterfacesRemoved",
|
||||
|
@ -928,8 +930,16 @@ bz_obj_shutdown(void)
|
|||
eldbus_signal_handler_del(sig_ifdel);
|
||||
sig_ifdel = NULL;
|
||||
}
|
||||
eldbus_proxy_unref(objman_proxy);
|
||||
objman_proxy = NULL;
|
||||
if (objman_proxy)
|
||||
{
|
||||
eldbus_proxy_unref(objman_proxy);
|
||||
objman_proxy = NULL;
|
||||
}
|
||||
if (objman_obj)
|
||||
{
|
||||
eldbus_object_unref(objman_obj);
|
||||
objman_obj = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue