chiark / gitweb /
systemd-fsck: always connect to systemd-fsckd
[elogind.git] / src / machine / machined.c
index ef59497fb212da2beb09a43ad4bbc01cedfd9913..1373362e9d761fdbc5d4d5d6bf0e3f88c939e1aa 100644 (file)
 #include <sys/epoll.h>
 
 #include "sd-daemon.h"
-
 #include "strv.h"
 #include "conf-parser.h"
 #include "cgroup-util.h"
 #include "mkdir.h"
 #include "bus-util.h"
 #include "bus-error.h"
-#include "machined.h"
 #include "label.h"
+#include "machine-image.h"
+#include "machined.h"
 
 Manager *manager_new(void) {
         Manager *m;
@@ -67,6 +67,7 @@ Manager *manager_new(void) {
 
 void manager_free(Manager *m) {
         Machine *machine;
+        Image *i;
 
         assert(m);
 
@@ -77,6 +78,15 @@ void manager_free(Manager *m) {
         hashmap_free(m->machine_units);
         hashmap_free(m->machine_leaders);
 
+        while ((i = hashmap_steal_first(m->image_cache)))
+                image_unref(i);
+
+        hashmap_free(m->image_cache);
+
+        sd_event_source_unref(m->image_cache_defer_event);
+
+        bus_verify_polkit_async_registry_free(m->polkit_registry);
+
         sd_bus_unref(m->bus);
         sd_event_unref(m->event);
 
@@ -152,6 +162,14 @@ static int manager_connect_bus(Manager *m) {
         if (r < 0)
                 return log_error_errno(r, "Failed to add machine enumerator: %m");
 
+        r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/machine1/image", "org.freedesktop.machine1.Image", image_vtable, image_object_find, m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add image object vtable: %m");
+
+        r = sd_bus_add_node_enumerator(m->bus, NULL, "/org/freedesktop/machine1/image", image_node_enumerator, m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add image enumerator: %m");
+
         r = sd_bus_add_match(m->bus,
                              NULL,
                              "type='signal',"
@@ -307,6 +325,8 @@ int main(int argc, char *argv[]) {
          * check stays in. */
         mkdir_label("/run/systemd/machines", 0755);
 
+        assert_se(sigprocmask_many(SIG_BLOCK, SIGCHLD, -1) >= 0);
+
         m = manager_new();
         if (!m) {
                 r = log_oom();