From 82c64bf578623f0678b4de1ac08c6bd8e5d95662 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 10 Jul 2010 04:51:03 +0200 Subject: [PATCH] snapshot: fix deserialization --- src/manager.c | 22 ++++++++++++++++------ src/manager.h | 2 ++ src/snapshot.c | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) 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) { diff --git a/src/manager.h b/src/manager.h index e5cf3a1c5..b44ffe27c 100644 --- a/src/manager.h +++ b/src/manager.h @@ -193,6 +193,8 @@ struct Manager { bool utmp_reboot_written:1; + bool deserializing:1; + bool show_status; bool confirm_spawn; }; diff --git a/src/snapshot.c b/src/snapshot.c index fe8a43dd3..11e7c3e28 100644 --- a/src/snapshot.c +++ b/src/snapshot.c @@ -56,7 +56,7 @@ static int snapshot_load(Unit *u) { /* Make sure that only snapshots created via snapshot_create() * can be loaded */ - if (!s->by_snapshot_create) + if (!s->by_snapshot_create && !s->meta.manager->deserializing) return -ENOENT; u->meta.load_state = UNIT_LOADED; -- 2.30.2