static bool check_idle(void *userdata) { Manager *m = userdata; manager_gc(m, true); return hashmap_isempty(m->machines); }
int manager_startup(Manager *m) { int r; Machine *machine; Iterator i; assert(m); assert(m->epoll_fd <= 0); m->epoll_fd = epoll_create1(EPOLL_CLOEXEC); if (m->epoll_fd < 0) return -errno; /* Connect to the bus */ r = manager_connect_bus(m); if (r < 0) return r; /* Deserialize state */ manager_enumerate_machines(m); /* Remove stale objects before we start them */ manager_gc(m, false); /* And start everything */ HASHMAP_FOREACH(machine, m->machines, i) machine_start(machine, NULL); return 0; }
int manager_run(Manager *m) { assert(m); for (;;) { struct epoll_event event; int n; manager_gc(m, true); if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE) continue; manager_gc(m, true); n = epoll_wait(m->epoll_fd, &event, 1, -1); if (n < 0) { if (errno == EINTR || errno == EAGAIN) continue; log_error("epoll() failed: %m"); return -errno; } if (n == 0) continue; switch (event.data.u32) { case FD_BUS: bus_loop_dispatch(m->bus_fd); break; default: assert_not_reached("Unknown fd"); } } return 0; }
int manager_run(Manager *m) { int r; 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); r = sd_event_run(m->event, (uint64_t) -1); if (r < 0) return r; } return 0; }
int manager_startup(Manager *m) { Machine *machine; Iterator i; int r; assert(m); /* Connect to the bus */ r = manager_connect_bus(m); if (r < 0) return r; /* Deserialize state */ manager_enumerate_machines(m); /* Remove stale objects before we start them */ manager_gc(m, false); /* And start everything */ HASHMAP_FOREACH(machine, m->machines, i) machine_start(machine, NULL, NULL); return 0; }