eldbus: ensure the lifetime of the eldbus object path is monitored for proxies

the object is instantly destroyed when connection is lost

Signed-off-by: Mike Blumenkrantz <zmike@osg.samsung.com>
This commit is contained in:
Cedric BAIL 2018-03-14 15:17:59 -04:00 committed by Cedric Bail
parent 67b135ab87
commit 3f5ac71ad6
1 changed files with 14 additions and 1 deletions

View File

@ -67,6 +67,14 @@ _eldbus_model_proxy_efl_object_constructor(Eo *obj, Eldbus_Model_Proxy_Data *pd)
return obj;
}
static void
_eldbus_model_proxy_object_del(void *data, Eldbus_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eldbus_Model_Proxy_Data *pd = data;
pd->object = NULL;
}
static void
_eldbus_model_proxy_custom_constructor(Eo *obj EINA_UNUSED,
Eldbus_Model_Proxy_Data *pd,
@ -77,6 +85,7 @@ _eldbus_model_proxy_custom_constructor(Eo *obj EINA_UNUSED,
EINA_SAFETY_ON_NULL_RETURN(interface);
pd->object = eldbus_object_ref(object);
eldbus_object_event_callback_add(object, ELDBUS_OBJECT_EVENT_DEL, _eldbus_model_proxy_object_del, pd);
pd->name = eina_stringshare_add(interface->name);
pd->interface = interface;
}
@ -89,7 +98,11 @@ _eldbus_model_proxy_efl_object_destructor(Eo *obj, Eldbus_Model_Proxy_Data *pd)
eina_hash_free(pd->properties_hash);
eina_stringshare_del(pd->name);
eldbus_object_unref(pd->object);
if (pd->object)
{
eldbus_object_event_callback_del(pd->object, ELDBUS_OBJECT_EVENT_DEL, _eldbus_model_proxy_object_del, pd);
eldbus_object_unref(pd->object);
}
efl_destructor(efl_super(obj, MY_CLASS));
}