discomfitor pushed a commit to branch master.

http://git.enlightenment.org/legacy/eldbus.git/commit/?id=880aa578c9c280101980c985e640882b57d9d272

commit 880aa578c9c280101980c985e640882b57d9d272
Author: José Roberto de Souza <jose.so...@intel.com>
Date:   Fri Nov 29 17:21:14 2013 -0200

    eldbus: Fix crash caused when the object of an monitored proxy is deleted
    
    This happen because proxy was already freed and we try print some 
information
    about the proxy in error message.
    
    This fix: https://phab.enlightenment.org/T543
---
 src/lib/eldbus_proxy.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/lib/eldbus_proxy.c b/src/lib/eldbus_proxy.c
index 9f02751..fcd553a 100644
--- a/src/lib/eldbus_proxy.c
+++ b/src/lib/eldbus_proxy.c
@@ -728,13 +728,23 @@ _property_iter(void *data, const void *key, 
Eldbus_Message_Iter *var)
 }
 
 static void
-_props_get_all(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending 
EINA_UNUSED)
+_on_monitored_proxy_del(void *data, Eldbus_Proxy *proxy EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Eldbus_Pending *pending = data;
+   eldbus_pending_cancel(pending);
+}
+
+static void
+_props_get_all(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
 {
    Eldbus_Proxy *proxy = data;
    Eldbus_Message_Iter *dict;
    const char *name, *error_msg;
    Eldbus_Proxy_Event_Property_Loaded event;
 
+   eldbus_proxy_event_callback_del(proxy, ELDBUS_PROXY_EVENT_DEL,
+                                   _on_monitored_proxy_del, pending);
+
    if (eldbus_message_error_get(msg, &name, &error_msg))
      {
         ERR("Error getting all properties of %s %s, error message: %s %s",
@@ -760,6 +770,7 @@ _props_get_all(void *data, const Eldbus_Message *msg, 
Eldbus_Pending *pending EI
 EAPI Eina_Bool
 eldbus_proxy_properties_monitor(Eldbus_Proxy *proxy, Eina_Bool enable)
 {
+   Eldbus_Pending *pending;
    ELDBUS_PROXY_CHECK_RETVAL(proxy, EINA_FALSE);
    if (proxy->monitor_enabled == enable)
      return proxy->props ? !!eina_hash_population(proxy->props) : EINA_FALSE;
@@ -787,7 +798,9 @@ eldbus_proxy_properties_monitor(Eldbus_Proxy *proxy, 
Eina_Bool enable)
    if (!proxy->props)
      proxy->props = eina_hash_string_superfast_new(_props_cache_free);
 
-   eldbus_proxy_property_get_all(proxy, _props_get_all, proxy);
+   pending = eldbus_proxy_property_get_all(proxy, _props_get_all, proxy);
+   eldbus_proxy_event_callback_add(proxy, ELDBUS_PROXY_EVENT_DEL,
+                                   _on_monitored_proxy_del, pending);
 
    if (proxy->properties_changed)
      return !!eina_hash_population(proxy->props);

-- 


Reply via email to