X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmanager.c;h=084b41f13e2e7e750ae8516e75b9a623f76c5287;hb=2121dcdded3275ed07786fc7924b6d40ca916dc9;hp=495c8e6ba359b83c76fc889ade2705e3ded74dbf;hpb=4fe60156fc45e34c7bcba4779123e15620532dff;p=elogind.git diff --git a/src/manager.c b/src/manager.c index 495c8e6ba..084b41f13 100644 --- a/src/manager.c +++ b/src/manager.c @@ -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,10 +2676,15 @@ 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; @@ -2781,15 +2788,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 +2811,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 +2841,7 @@ int manager_reload(Manager *m) { r = q; assert(m->n_deserializing > 0); - m->n_deserializing ++; + m->n_deserializing--; finish: if (f) @@ -2937,7 +2953,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) {