+static void session_swap_controller(Session *s, char *name) {
+ SessionDevice *sd;
+
+ if (s->controller) {
+ manager_drop_busname(s->manager, s->controller);
+ free(s->controller);
+ s->controller = NULL;
+
+ /* Drop all devices as they're now unused. Do that after the
+ * controller is released to avoid sending out useles
+ * dbus signals. */
+ while ((sd = hashmap_first(s->devices)))
+ session_device_free(sd);
+ }
+
+ s->controller = name;
+ session_save(s);
+}
+