gdbus: fix not handling bus disconnects
authorLuiz Augusto von Dentz <luiz.dentz-von@nokia.com>
Wed, 13 Oct 2010 12:06:46 +0000 (15:06 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 13 Oct 2010 12:54:15 +0000 (15:54 +0300)
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.

gdbus/mainloop.c

index ec10ab0..862c434 100644 (file)
@@ -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;