lucas pushed a commit to branch master.

commit 9e4dc299a73d81cfa2c0fa32db1d2179ade21617
Author: José Roberto de Souza <[email protected]>
Date:   Sat Mar 23 01:36:48 2013 -0300

    eldbus: Fix eldbus_service_*_get() functions over FDO interfaces
---
 src/lib/eldbus/eldbus_service.c | 38 +++++++++++++-------------------------
 1 file changed, 13 insertions(+), 25 deletions(-)

diff --git a/src/lib/eldbus/eldbus_service.c b/src/lib/eldbus/eldbus_service.c
index e6946c2..b42b16e 100644
--- a/src/lib/eldbus/eldbus_service.c
+++ b/src/lib/eldbus/eldbus_service.c
@@ -66,9 +66,9 @@ static DBusObjectPathVTable vtable = {
   NULL
 };
 
-Eldbus_Service_Interface *introspectable;
-Eldbus_Service_Interface *properties_iface;
-Eldbus_Service_Interface *objmanager;
+static Eldbus_Service_Interface *introspectable;
+static Eldbus_Service_Interface *properties_iface;
+static Eldbus_Service_Interface *objmanager;
 
 static inline void
 _introspect_arguments_append(Eina_Strbuf *buf, const Eldbus_Arg_Info *args,
@@ -1147,41 +1147,29 @@ _object_handler(DBusConnection *conn EINA_UNUSED, 
DBusMessage *msg, void *user_d
    eldbus_msg = eldbus_message_new(EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(eldbus_msg, DBUS_HANDLER_RESULT_NEED_MEMORY);
    eldbus_msg->dbus_msg = msg;
+   dbus_message_ref(eldbus_msg->dbus_msg);
    dbus_message_iter_init(eldbus_msg->dbus_msg, 
&eldbus_msg->iterator->dbus_iterator);
 
    if (!_have_signature(method->in, eldbus_msg))
-     {
-        reply = eldbus_message_error_new(eldbus_msg,
-                                        DBUS_ERROR_INVALID_SIGNATURE,
-                                        "See introspectable to know the 
expected signature");
-     }
+     reply = eldbus_message_error_new(eldbus_msg, DBUS_ERROR_INVALID_SIGNATURE,
+                                      "See introspectable to know the expected 
signature");
    else
      {
         if (iface->obj)
           reply = method->cb(iface, eldbus_msg);
         else
           {
-             //if iface does have obj it is some of FreeDesktop interfaces:
-             //Introspectable, Properties...
-             Eldbus_Service_Interface *cpy;
-             cpy = calloc(1, sizeof(Eldbus_Service_Interface));
-             if (!cpy)
-              {
-                 dbus_message_ref(eldbus_msg->dbus_msg);
-                  eldbus_message_unref(eldbus_msg);
-                  return DBUS_HANDLER_RESULT_NEED_MEMORY;
-               }
-             cpy->obj = obj;
-             reply = method->cb(cpy, eldbus_msg);
-             free(cpy);
+             /* if iface does have obj it is some of FreeDesktop interfaces:
+                Introspectable, Properties or ObjectManager */
+             iface->obj = obj;
+             reply = method->cb(iface, eldbus_msg);
+             iface->obj = NULL;
           }
      }
 
-   dbus_message_ref(eldbus_msg->dbus_msg);
    eldbus_message_unref(eldbus_msg);
-   if (!reply) return DBUS_HANDLER_RESULT_HANDLED;
-
-   _eldbus_connection_send(obj->conn, reply, NULL, NULL, -1);
+   if (reply)
+     _eldbus_connection_send(obj->conn, reply, NULL, NULL, -1);
 
    return DBUS_HANDLER_RESULT_HANDLED;
 }

-- 

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2

Reply via email to