]> err.no Git - systemd/commitdiff
dbus: shut down bus connection cleanly and fully when a direct client disconnects
authorLennart Poettering <lennart@poettering.net>
Wed, 7 Jul 2010 20:28:02 +0000 (22:28 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 7 Jul 2010 20:28:02 +0000 (22:28 +0200)
src/dbus.c

index 817219764d7b43788487c99f69d98d39c63bef4b..0008cfd303a933ed24b0bc6a5153f6ec4a3dd9a1 100644 (file)
@@ -71,6 +71,7 @@ static const char *error_to_dbus(int error);
 static void bus_done_api(Manager *m);
 static void bus_done_system(Manager *m);
 static void bus_done_private(Manager *m);
+static void shutdown_connection(Manager *m, DBusConnection *c);
 
 static void bus_dispatch_status(DBusConnection *bus, DBusDispatchStatus status, void *data)  {
         Manager *m = data;
@@ -477,11 +478,8 @@ static DBusHandlerResult private_bus_message_filter(DBusConnection *connection,
                   dbus_message_get_member(message),
                   dbus_message_get_path(message));
 
-        if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
-                set_remove(m->bus_connections, connection);
-                set_remove(m->bus_connections_for_dispatch, connection);
-                dbus_connection_unref(connection);
-        }
+        if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected"))
+                shutdown_connection(m, connection);
 
         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 }