diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-07-21 05:16:45 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-07-21 05:16:45 +0200 |
commit | 3a2776bc8615eabefee8bd72d51b3c80519713c2 (patch) | |
tree | 9c8af11fe99b01704e6dd40041e727ccaeb1a639 | |
parent | cc42e0817ff82c5faa21678325b6683493b2e792 (diff) |
service: save/restore status text string
-rw-r--r-- | src/service.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/service.c b/src/service.c index 978dca9341..7fb3db3410 100644 --- a/src/service.c +++ b/src/service.c @@ -2000,6 +2000,9 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) { unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known)); + if (s->status_text) + unit_serialize_item(u, f, "status-text", s->status_text); + /* There's a minor uncleanliness here: if there are multiple * commands attached here, we will start from the first one * again */ @@ -2084,6 +2087,14 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, log_debug("Failed to parse main-pid-known value %s", value); else s->main_pid_known = b; + } else if (streq(key, "status-text")) { + char *t; + + if ((t = strdup(value))) { + free(s->status_text); + s->status_text = t; + } + } else if (streq(key, "control-command")) { ServiceExecCommand id; @@ -2508,15 +2519,21 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) { if ((e = strv_find_prefix(tags, "STATUS="))) { char *t; - if (!(t = strdup(e+7))) { - log_error("Failed to allocate string."); - return; - } + if (e[7]) { + if (!(t = strdup(e+7))) { + log_error("Failed to allocate string."); + return; + } + + log_debug("%s: got %s", u->meta.id, e); - log_debug("%s: got %s", u->meta.id, e); + free(s->status_text); + s->status_text = t; + } else { + free(s->status_text); + s->status_text = NULL; + } - free(s->status_text); - s->status_text = t; } } |