summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-12-19 21:15:08 +0100
committerLennart Poettering <lennart@poettering.net>2013-12-19 22:18:39 +0100
commitd9e34bfda3d34dcde00a876cb052e7de0655e1cb (patch)
treeead467e33f9269b000a07798b92f4352685a1eaf /src
parent37224a5ff522a366b353e8a01e2c2eee1e5416e5 (diff)
machined: implement exit-on-idle
Diffstat (limited to 'src')
-rw-r--r--src/machine/machined.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/machine/machined.c b/src/machine/machined.c
index 6550075b56..6eeb053168 100644
--- a/src/machine/machined.c
+++ b/src/machine/machined.c
@@ -275,26 +275,23 @@ int manager_startup(Manager *m) {
return 0;
}
-int manager_run(Manager *m) {
- int r;
-
- assert(m);
+static bool check_idle(void *userdata) {
+ Manager *m = userdata;
- 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[]) {