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));
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[]) {