chiark / gitweb /
logind: add session controllers
[elogind.git] / src / login / logind.c
index 89e4eeea16db1dbdcd8121bc32ff241d48bea839..c99c2844e8deba0ab25a2f0ed8e3c31b1b4f0cf4 100644 (file)
@@ -391,11 +391,21 @@ int manager_watch_busname(Manager *m, const char *name) {
 }
 
 void manager_drop_busname(Manager *m, const char *name) {
+        Session *session;
+        Iterator i;
         char *key;
 
         assert(m);
         assert(name);
 
+        if (!hashmap_get(m->busnames, name))
+                return;
+
+        /* keep it if the name still owns a controller */
+        HASHMAP_FOREACH(session, m->sessions, i)
+                if (session_is_controller(session, name))
+                        return;
+
         key = hashmap_remove(m->busnames, name);
         if (key)
                 free(key);