chiark / gitweb /
core: do not use quotes around virt and arch
[elogind.git] / src / core / path.c
index 656ed6941d9037f7aa3acae08fc7740e6ad7da1d..6be9ac84bed841393fd364d8ee14381da8ce3ce8 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <sys/inotify.h>
 #include <sys/epoll.h>
-#include <sys/ioctl.h>
 #include <errno.h>
 #include <unistd.h>
 
@@ -31,7 +30,6 @@
 #include "mkdir.h"
 #include "dbus-path.h"
 #include "special.h"
-#include "path-util.h"
 #include "macro.h"
 #include "bus-util.h"
 #include "bus-error.h"
@@ -157,7 +155,7 @@ void path_spec_unwatch(PathSpec *s) {
 }
 
 int path_spec_fd_event(PathSpec *s, uint32_t revents) {
-        uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct inotify_event);
+        union inotify_event_buffer buffer;
         struct inotify_event *e;
         ssize_t l;
         int r = 0;
@@ -167,7 +165,7 @@ int path_spec_fd_event(PathSpec *s, uint32_t revents) {
                 return -EINVAL;
         }
 
-        l = read(s->inotify_fd, buffer, sizeof(buffer));
+        l = read(s->inotify_fd, &buffer, sizeof(buffer));
         if (l < 0) {
                 if (errno == EAGAIN || errno == EINTR)
                         return 0;
@@ -440,7 +438,12 @@ static void path_set_state(Path *p, PathState state) {
 
 static void path_enter_waiting(Path *p, bool initial, bool recheck);
 
-static int path_coldplug(Unit *u) {
+static int path_enter_waiting_coldplug(Unit *u) {
+        path_enter_waiting(PATH(u), true, true);
+        return 0;
+}
+
+static int path_coldplug(Unit *u, Hashmap *deferred_work) {
         Path *p = PATH(u);
 
         assert(p);
@@ -449,9 +452,10 @@ static int path_coldplug(Unit *u) {
         if (p->deserialized_state != p->state) {
 
                 if (p->deserialized_state == PATH_WAITING ||
-                    p->deserialized_state == PATH_RUNNING)
-                        path_enter_waiting(p, true, true);
-                else
+                    p->deserialized_state == PATH_RUNNING) {
+                        hashmap_put(deferred_work, u, &path_enter_waiting_coldplug);
+                        path_set_state(p, PATH_WAITING);
+                } else
                         path_set_state(p, p->deserialized_state);
         }
 
@@ -572,7 +576,7 @@ static int path_start(Unit *u) {
         p->result = PATH_SUCCESS;
         path_enter_waiting(p, true, true);
 
-        return 0;
+        return 1;
 }
 
 static int path_stop(Unit *u) {
@@ -582,7 +586,7 @@ static int path_stop(Unit *u) {
         assert(p->state == PATH_WAITING || p->state == PATH_RUNNING);
 
         path_enter_dead(p, PATH_SUCCESS);
-        return 0;
+        return 1;
 }
 
 static int path_serialize(Unit *u, FILE *f, FDSet *fds) {