chiark / gitweb /
dbus: no sync D-Bus connection flushing
authorMichal Schmidt <mschmidt@redhat.com>
Mon, 19 Dec 2011 17:32:10 +0000 (18:32 +0100)
committerMichal Schmidt <mschmidt@redhat.com>
Mon, 19 Dec 2011 23:23:51 +0000 (00:23 +0100)
Blocking on D-Bus in a system manager could lead to deadlock.

src/dbus.c

index 81b4f53..f9250f1 100644 (file)
@@ -1196,7 +1196,9 @@ static void shutdown_connection(Manager *m, DBusConnection *c) {
         }
 
         dbus_connection_set_dispatch_status_function(c, NULL, NULL, NULL);
-        dbus_connection_flush(c);
+        /* system manager cannot afford to block on DBus */
+        if (m->running_as != MANAGER_SYSTEM)
+                dbus_connection_flush(c);
         dbus_connection_close(c);
         dbus_connection_unref(c);
 }