chiark / gitweb /
util: add files_same() helper function
[elogind.git] / src / machine / machined.c
index f695cfe116ca36371ada99faab110415a153d321..20e6f7cd63e92c2ae192eefa2d4e5407b3478a0c 100644 (file)
@@ -106,6 +106,10 @@ int manager_enumerate_machines(Manager *m) {
                 if (!dirent_is_file(de))
                         continue;
 
+                /* Ignore symlinks that map the unit name to the machine */
+                if (startswith(de->d_name, "unit:"))
+                        continue;
+
                 k = manager_add_machine(m, de->d_name, &machine);
                 if (k < 0) {
                         log_error("Failed to add machine by file name %s: %s", de->d_name, strerror(-k));
@@ -219,7 +223,7 @@ static int manager_connect_bus(Manager *m) {
                 return r;
         }
 
-        r = sd_bus_request_name(m->bus, "org.freedesktop.machine1", SD_BUS_NAME_REPLACE_EXISTING);
+        r = sd_bus_request_name(m->bus, "org.freedesktop.machine1", 0);
         if (r < 0) {
                 log_error("Failed to register name: %s", strerror(-r));
                 return r;
@@ -275,26 +279,23 @@ int manager_startup(Manager *m) {
         return 0;
 }
 
-int manager_run(Manager *m) {
-        int r;
+static bool check_idle(void *userdata) {
+        Manager *m = userdata;
 
-        assert(m);
-
-        for (;;) {
-                r = sd_event_get_state(m->event);
-                if (r < 0)
-                        return r;
-                if (r == SD_EVENT_FINISHED)
-                        return 0;
+        manager_gc(m, true);
 
-                manager_gc(m, true);
+        return hashmap_isempty(m->machines);
+}
 
-                r = sd_event_run(m->event, (uint64_t) -1);
-                if (r < 0)
-                        return r;
-        }
+int manager_run(Manager *m) {
+        assert(m);
 
-        return 0;
+        return bus_event_loop_with_idle(
+                        m->event,
+                        m->bus,
+                        "org.freedesktop.machine1",
+                        DEFAULT_EXIT_USEC,
+                        check_idle, m);
 }
 
 int main(int argc, char *argv[]) {