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 {
|
struct _Obj {
|
||||||
//// internal object data
|
//// internal object data
|
||||||
|
Eldbus_Object *obj;
|
||||||
Eldbus_Proxy *proxy;
|
Eldbus_Proxy *proxy;
|
||||||
Eldbus_Proxy *prop_proxy;
|
Eldbus_Proxy *prop_proxy;
|
||||||
Eldbus_Signal_Handler *prop_sig;
|
Eldbus_Signal_Handler *prop_sig;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "e.h"
|
#include "e.h"
|
||||||
|
|
||||||
static Eldbus_Service_Interface *agent_iface = NULL;
|
static Eldbus_Service_Interface *agent_iface = NULL;
|
||||||
|
static Eldbus_Object *agent_obj = NULL;
|
||||||
static Eldbus_Proxy *agent_proxy = NULL;
|
static Eldbus_Proxy *agent_proxy = NULL;
|
||||||
static void (*fn_release) (void) = NULL;
|
static void (*fn_release) (void) = NULL;
|
||||||
static void (*fn_cancel) (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);
|
eldbus_proxy_unref(agent_proxy);
|
||||||
agent_proxy = NULL;
|
agent_proxy = NULL;
|
||||||
}
|
}
|
||||||
|
if (agent_obj)
|
||||||
|
{
|
||||||
|
eldbus_object_unref(agent_obj);
|
||||||
|
agent_obj = NULL;
|
||||||
|
}
|
||||||
if (agent_iface)
|
if (agent_iface)
|
||||||
{
|
{
|
||||||
eldbus_service_object_unregister(agent_iface);
|
eldbus_service_object_unregister(agent_iface);
|
||||||
|
@ -266,10 +272,8 @@ bz_agent_msg_u32_add(Eldbus_Message *msg, unsigned int u32)
|
||||||
void
|
void
|
||||||
bz_agent_init(void)
|
bz_agent_init(void)
|
||||||
{
|
{
|
||||||
Eldbus_Object *obj;
|
agent_obj = eldbus_object_get(bz_conn, "org.bluez", "/org/bluez");
|
||||||
|
agent_proxy = eldbus_proxy_get(agent_obj, "org.bluez.AgentManager1");
|
||||||
obj = eldbus_object_get(bz_conn, "org.bluez", "/org/bluez");
|
|
||||||
agent_proxy = eldbus_proxy_get(obj, "org.bluez.AgentManager1");
|
|
||||||
agent_iface = eldbus_service_interface_register
|
agent_iface = eldbus_service_interface_register
|
||||||
(bz_conn, "/org/enlightenment/bluez5/agent", &agent_desc);
|
(bz_conn, "/org/enlightenment/bluez5/agent", &agent_desc);
|
||||||
if (agent_proxy)
|
if (agent_proxy)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "bz.h"
|
#include "bz.h"
|
||||||
#include "e_mod_main.h"
|
#include "e_mod_main.h"
|
||||||
|
|
||||||
|
static Eldbus_Object *objman_obj = NULL;
|
||||||
static Eldbus_Proxy *objman_proxy = NULL;
|
static Eldbus_Proxy *objman_proxy = NULL;
|
||||||
static Eldbus_Signal_Handler *sig_ifadd = NULL;
|
static Eldbus_Signal_Handler *sig_ifadd = NULL;
|
||||||
static Eldbus_Signal_Handler *sig_ifdel = 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 *
|
Obj *
|
||||||
bz_obj_add(const char *path)
|
bz_obj_add(const char *path)
|
||||||
{
|
{
|
||||||
Eldbus_Object *obj;
|
|
||||||
|
|
||||||
Obj *o = calloc(1, sizeof(Obj));
|
Obj *o = calloc(1, sizeof(Obj));
|
||||||
o->ref = 1;
|
o->ref = 1;
|
||||||
o->path = eina_stringshare_add(path);
|
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->type = BZ_OBJ_UNKNOWN;
|
||||||
o->in_table = EINA_TRUE;
|
o->in_table = EINA_TRUE;
|
||||||
eina_hash_add(obj_table, o->path, o);
|
eina_hash_add(obj_table, o->path, o);
|
||||||
if (!strcmp(o->path, "/org/bluez"))
|
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->type = BZ_OBJ_BLUEZ;
|
||||||
o->add_called = EINA_TRUE;
|
o->add_called = EINA_TRUE;
|
||||||
bz_obj_ref(o);
|
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_
|
// all devices are /org/bluez/XXX/dev_XXX so look for /dev_
|
||||||
else if (strstr(o->path, "/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;
|
o->type = BZ_OBJ_DEVICE;
|
||||||
if (o->proxy)
|
if (o->proxy)
|
||||||
{
|
{
|
||||||
eldbus_proxy_property_get_all(o->proxy, cb_obj_prop, o);
|
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");
|
"org.freedesktop.DBus.Properties");
|
||||||
if (o->prop_proxy)
|
if (o->prop_proxy)
|
||||||
o->prop_sig = eldbus_proxy_signal_handler_add(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/
|
// all dadapters begin with /org/bluez/
|
||||||
else if (!strncmp(o->path, "/org/bluez/", 11))
|
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;
|
o->type = BZ_OBJ_ADAPTER;
|
||||||
if (o->proxy)
|
if (o->proxy)
|
||||||
{
|
{
|
||||||
eldbus_proxy_property_get_all(o->proxy, cb_obj_prop, o);
|
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");
|
"org.freedesktop.DBus.Properties");
|
||||||
if (o->prop_proxy)
|
if (o->prop_proxy)
|
||||||
o->prop_sig = eldbus_proxy_signal_handler_add(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);
|
eldbus_signal_handler_del(o->prop_sig);
|
||||||
o->prop_sig = NULL;
|
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)
|
if (o->path)
|
||||||
{
|
{
|
||||||
eina_stringshare_del(o->path);
|
eina_stringshare_del(o->path);
|
||||||
|
@ -787,6 +776,21 @@ bz_obj_unref(Obj *o)
|
||||||
ecore_exe_free(o->ping_exe);
|
ecore_exe_free(o->ping_exe);
|
||||||
o->ping_exe = NULL;
|
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);
|
free(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -894,12 +898,10 @@ _obj_hash_free(Obj *o)
|
||||||
void
|
void
|
||||||
bz_obj_init(void)
|
bz_obj_init(void)
|
||||||
{
|
{
|
||||||
Eldbus_Object *obj;
|
|
||||||
|
|
||||||
obj_table = eina_hash_string_superfast_new((void *)_obj_hash_free);
|
obj_table = eina_hash_string_superfast_new((void *)_obj_hash_free);
|
||||||
|
|
||||||
obj = eldbus_object_get(bz_conn, "org.bluez", "/");
|
objman_obj = eldbus_object_get(bz_conn, "org.bluez", "/");
|
||||||
objman_proxy = eldbus_proxy_get(obj, "org.freedesktop.DBus.ObjectManager");
|
objman_proxy = eldbus_proxy_get(objman_obj, "org.freedesktop.DBus.ObjectManager");
|
||||||
sig_ifadd = eldbus_proxy_signal_handler_add(objman_proxy, "InterfacesAdded",
|
sig_ifadd = eldbus_proxy_signal_handler_add(objman_proxy, "InterfacesAdded",
|
||||||
cb_obj_add, NULL);
|
cb_obj_add, NULL);
|
||||||
sig_ifdel = eldbus_proxy_signal_handler_add(objman_proxy, "InterfacesRemoved",
|
sig_ifdel = eldbus_proxy_signal_handler_add(objman_proxy, "InterfacesRemoved",
|
||||||
|
@ -928,8 +930,16 @@ bz_obj_shutdown(void)
|
||||||
eldbus_signal_handler_del(sig_ifdel);
|
eldbus_signal_handler_del(sig_ifdel);
|
||||||
sig_ifdel = NULL;
|
sig_ifdel = NULL;
|
||||||
}
|
}
|
||||||
eldbus_proxy_unref(objman_proxy);
|
if (objman_proxy)
|
||||||
objman_proxy = NULL;
|
{
|
||||||
|
eldbus_proxy_unref(objman_proxy);
|
||||||
|
objman_proxy = NULL;
|
||||||
|
}
|
||||||
|
if (objman_obj)
|
||||||
|
{
|
||||||
|
eldbus_object_unref(objman_obj);
|
||||||
|
objman_obj = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue