cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3f5ac71ad6108aec2e61d12a98f41b276415af38

commit 3f5ac71ad6108aec2e61d12a98f41b276415af38
Author: Cedric BAIL <[email protected]>
Date:   Wed Mar 14 15:17:59 2018 -0400

    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 <[email protected]>
---
 src/lib/eldbus/eldbus_model_proxy.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/lib/eldbus/eldbus_model_proxy.c 
b/src/lib/eldbus/eldbus_model_proxy.c
index 3c54d22ca5..e4eeb8cc37 100644
--- a/src/lib/eldbus/eldbus_model_proxy.c
+++ b/src/lib/eldbus/eldbus_model_proxy.c
@@ -68,6 +68,14 @@ _eldbus_model_proxy_efl_object_constructor(Eo *obj, 
Eldbus_Model_Proxy_Data *pd)
 }
 
 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,
                                 Eldbus_Object *object,
@@ -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));
 }

-- 


Reply via email to