summaryrefslogtreecommitdiff
path: root/gdbus
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz-von@nokia.com>2010-10-13 15:06:46 +0300
committerMarcel Holtmann <marcel@holtmann.org>2010-10-13 15:54:15 +0300
commitfe52075aa0f7e31e25138794e46640ccd49aa3de (patch)
tree65460e958ba0e09b44c9e47a81b91f8974af0b10 /gdbus
parentcb3e527d1f0b58ea2f90c72ec73130fc10e6aa54 (diff)
downloadconnman-fe52075aa0f7e31e25138794e46640ccd49aa3de.tar.gz
connman-fe52075aa0f7e31e25138794e46640ccd49aa3de.tar.bz2
connman-fe52075aa0f7e31e25138794e46640ccd49aa3de.zip
gdbus: fix not handling bus disconnects
We where not dispatching data when a bus disconnects which cause Disconnected signal to not be processed and thus causing the process to either not exit or to not trigger callbacks registered with g_dbus_set_disconnect_function. To fix this now we always schedule a dispatch which will make sure data still not processed will make its way to the proper handlers even if disconnected.
Diffstat (limited to 'gdbus')
-rw-r--r--gdbus/mainloop.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gdbus/mainloop.c b/gdbus/mainloop.c
index ec10ab06..862c434a 100644
--- a/gdbus/mainloop.c
+++ b/gdbus/mainloop.c
@@ -95,6 +95,7 @@ static gboolean watch_func(GIOChannel *chan, GIOCondition cond, gpointer data)
{
struct watch_info *info = data;
unsigned int flags = 0;
+ DBusDispatchStatus status;
dbus_connection_ref(info->conn);
@@ -105,6 +106,9 @@ static gboolean watch_func(GIOChannel *chan, GIOCondition cond, gpointer data)
dbus_watch_handle(info->watch, flags);
+ status = dbus_connection_get_dispatch_status(info->conn);
+ queue_dispatch(info->conn, status);
+
dbus_connection_unref(info->conn);
return TRUE;