zehortigoza pushed a commit to branch master.
commit 091c5425c6cdf0a1acb4728c7fd1d0dc57667ffd
Author: José Roberto de Souza <[email protected]>
Date: Mon Aug 26 16:11:31 2013 -0300
eldbus: Handle correclty the last unref of a object path or conn in service
callback
This allow user remove the last reference of service object path or last
last reference of connection be removed inside of a method callback.
---
src/lib/eldbus/eldbus_service.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/lib/eldbus/eldbus_service.c b/src/lib/eldbus/eldbus_service.c
index 490b045..4c793c8 100644
--- a/src/lib/eldbus/eldbus_service.c
+++ b/src/lib/eldbus/eldbus_service.c
@@ -1264,16 +1264,17 @@ _object_unregister(DBusConnection *conn EINA_UNUSED,
void *user_data)
}
static DBusHandlerResult
-_object_handler(DBusConnection *conn EINA_UNUSED, DBusMessage *msg, void
*user_data)
+_object_handler(DBusConnection *dbus_conn EINA_UNUSED, DBusMessage *msg, void
*user_data)
{
Eldbus_Service_Object *obj;
Eldbus_Service_Interface *iface;
const Eldbus_Method *method;
- Eldbus_Message *eldbus_msg;
- Eldbus_Message *reply;
+ Eldbus_Message *eldbus_msg, *reply;
+ Eldbus_Connection *conn;
obj = user_data;
if (!obj) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ conn = obj->conn;
DBG("Connection@%p Got message:\n"
" Type: %s\n"
@@ -1299,6 +1300,9 @@ _object_handler(DBusConnection *conn EINA_UNUSED,
DBusMessage *msg, void *user_d
dbus_message_ref(eldbus_msg->dbus_msg);
dbus_message_iter_init(eldbus_msg->dbus_msg,
&eldbus_msg->iterator->dbus_iterator);
+ eldbus_init();
+ eldbus_connection_ref(conn);
+
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");
@@ -1318,7 +1322,10 @@ _object_handler(DBusConnection *conn EINA_UNUSED,
DBusMessage *msg, void *user_d
eldbus_message_unref(eldbus_msg);
if (reply)
- _eldbus_connection_send(obj->conn, reply, NULL, NULL, -1);
+ _eldbus_connection_send(conn, reply, NULL, NULL, -1);
+
+ eldbus_connection_unref(conn);
+ eldbus_shutdown();
return DBUS_HANDLER_RESULT_HANDLED;
}
--
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk