manager: serialize/deserialize startup time, too

This commit is contained in:
Lennart Poettering 2010-08-11 20:19:27 +02:00
parent 19b68260aa
commit 10f8e83cbb
2 changed files with 40 additions and 5 deletions

View File

@ -2351,6 +2351,10 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds) {
assert(f); assert(f);
assert(fds); assert(fds);
fprintf(f, "startup-timestamp=%llu %llu\n\n",
(unsigned long long) m->startup_timestamp.realtime,
(unsigned long long) m->startup_timestamp.monotonic);
HASHMAP_FOREACH_KEY(u, t, m->units, i) { HASHMAP_FOREACH_KEY(u, t, m->units, i) {
if (u->meta.id != t) if (u->meta.id != t)
continue; continue;
@ -2382,6 +2386,37 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
m->n_deserializing ++; m->n_deserializing ++;
for (;;) {
char line[1024], *l;
if (!fgets(line, sizeof(line), f)) {
if (feof(f))
r = 0;
else
r = -errno;
goto finish;
}
char_array_0(line);
l = strstrip(line);
if (l[0] == 0)
break;
if (startswith(l, "startup-timestamp=")) {
unsigned long long a, b;
if (sscanf(l+18, "%lli %llu", &a, &b) != 2)
log_debug("Failed to parse startup timestamp value %s", l+18);
else {
m->startup_timestamp.realtime = a;
m->startup_timestamp.monotonic = b;
}
} else
log_debug("Unknown serialization item '%s'", l);
}
for (;;) { for (;;) {
Unit *u; Unit *u;
char name[UNIT_NAME_MAX+2]; char name[UNIT_NAME_MAX+2];
@ -2389,9 +2424,10 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
/* Start marker */ /* Start marker */
if (!fgets(name, sizeof(name), f)) { if (!fgets(name, sizeof(name), f)) {
if (feof(f)) if (feof(f))
break; r = 0;
else
r = -errno; r = -errno;
goto finish; goto finish;
} }
@ -2404,14 +2440,12 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
goto finish; goto finish;
} }
finish:
if (ferror(f)) { if (ferror(f)) {
r = -EIO; r = -EIO;
goto finish; goto finish;
} }
r = 0;
finish:
assert(m->n_deserializing > 0); assert(m->n_deserializing > 0);
m->n_deserializing --; m->n_deserializing --;

View File

@ -1983,6 +1983,7 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
return -errno; return -errno;
} }
char_array_0(line);
l = strstrip(line); l = strstrip(line);
/* End marker */ /* End marker */