X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmachine%2Fmachined.c;h=20e6f7cd63e92c2ae192eefa2d4e5407b3478a0c;hb=c305c32580a1d7689a401e8cf673ec7936c12bbe;hp=6550075b564412f51c4055435a95c2c539d5a9e5;hpb=5bb658a1784a0fd4f0f32adb4b1fb636ff503f7d;p=elogind.git diff --git a/src/machine/machined.c b/src/machine/machined.c index 6550075b5..20e6f7cd6 100644 --- a/src/machine/machined.c +++ b/src/machine/machined.c @@ -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)); @@ -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[]) {