chiark / gitweb /
util: include `stdarg.h`
[elogind.git] / src / manager.c
index 495c8e6ba359b83c76fc889ade2705e3ded74dbf..68d43ada44f61fa6dc75091bca65703e85dba319 100644 (file)
@@ -2654,6 +2654,8 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds) {
         assert(f);
         assert(fds);
 
+        m->n_serializing ++;
+
         fprintf(f, "current-job-id=%i\n", m->current_job_id);
         fprintf(f, "taint-usr=%s\n", yes_no(m->taint_usr));
 
@@ -2674,13 +2676,22 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds) {
                 fputs(u->meta.id, f);
                 fputc('\n', f);
 
-                if ((r = unit_serialize(u, f, fds)) < 0)
+                if ((r = unit_serialize(u, f, fds)) < 0) {
+                        m->n_serializing --;
                         return r;
+                }
         }
 
+        assert(m->n_serializing > 0);
+        m->n_serializing --;
+
         if (ferror(f))
                 return -EIO;
 
+        r = bus_fdset_add_all(m, fds);
+        if (r < 0)
+                return r;
+
         return 0;
 }
 
@@ -2781,15 +2792,21 @@ int manager_reload(Manager *m) {
         if ((r = manager_open_serialization(m, &f)) < 0)
                 return r;
 
+        m->n_serializing ++;
+
         if (!(fds = fdset_new())) {
+                m->n_serializing --;
                 r = -ENOMEM;
                 goto finish;
         }
 
-        if ((r = manager_serialize(m, f, fds)) < 0)
+        if ((r = manager_serialize(m, f, fds)) < 0) {
+                m->n_serializing --;
                 goto finish;
+        }
 
         if (fseeko(f, 0, SEEK_SET) < 0) {
+                m->n_serializing --;
                 r = -errno;
                 goto finish;
         }
@@ -2798,6 +2815,9 @@ int manager_reload(Manager *m) {
         manager_clear_jobs_and_units(m);
         manager_undo_generators(m);
 
+        assert(m->n_serializing > 0);
+        m->n_serializing --;
+
         /* Find new unit paths */
         lookup_paths_free(&m->lookup_paths);
         if ((q = lookup_paths_init(&m->lookup_paths, m->running_as)) < 0)
@@ -2825,7 +2845,7 @@ int manager_reload(Manager *m) {
                 r = q;
 
         assert(m->n_deserializing > 0);
-        m->n_deserializing ++;
+        m->n_deserializing--;
 
 finish:
         if (f)
@@ -2937,7 +2957,7 @@ void manager_run_generators(Manager *m) {
                 const char *p;
                 char user_path[] = "/tmp/systemd-generator-XXXXXX";
 
-                if (m->running_as == MANAGER_SYSTEM) {
+                if (m->running_as == MANAGER_SYSTEM && getpid() == 1) {
                         p = "/run/systemd/generator";
 
                         if (mkdir_p(p, 0755) < 0) {