snapshot: fix deserialization

This commit is contained in:
Lennart Poettering 2010-07-10 04:51:03 +02:00
parent 1e001f52d2
commit 82c64bf578
3 changed files with 19 additions and 7 deletions

View File

@ -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) {

View File

@ -193,6 +193,8 @@ struct Manager {
bool utmp_reboot_written:1;
bool deserializing:1;
bool show_status;
bool confirm_spawn;
};

View File

@ -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;