X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmanager.c;h=bd4f4659afb77c1fc0ded97f07f645cd489b3435;hp=a643263213a2988c563a03f5f6d7b7f9d76075d5;hb=82c64bf578623f0678b4de1ac08c6bd8e5d95662;hpb=1e001f52d20a4685c9e8cf3cfa690021ca05c9e7 diff --git a/src/manager.c b/src/manager.c index a64326321..bd4f4659a 100644 --- a/src/manager.c +++ b/src/manager.c @@ -2279,6 +2279,8 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { log_debug("Deserializing state..."); + m->deserializing = true; + for (;;) { Unit *u; char name[UNIT_NAME_MAX+2]; @@ -2288,22 +2290,30 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { if (feof(f)) break; - return -errno; + r = -errno; + goto finish; } char_array_0(name); if ((r = manager_load_unit(m, strstrip(name), NULL, NULL, &u)) < 0) - return r; + goto finish; if ((r = unit_deserialize(u, f, fds)) < 0) - return r; + goto finish; } - if (ferror(f)) - return -EIO; + if (ferror(f)) { + r = -EIO; + goto finish; + } - return 0; + r = 0; + +finish: + m->deserializing = false; + + return r; } int manager_reload(Manager *m) {