summaryrefslogtreecommitdiff
path: root/src/sleep
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-10-24 13:04:30 +0200
committerLennart Poettering <lennart@poettering.net>2018-10-24 13:07:53 +0200
commit14250f0942b0c1122a35d678e73945d7adf9cfa0 (patch)
tree1976c3932f008b1d8f48c1983cd67047322e9a70 /src/sleep
parentc695101f47824a6d2142621b439a69f4373f2abf (diff)
downloadsystemd-14250f0942b0c1122a35d678e73945d7adf9cfa0.tar.gz
sleep: rework what we do if a suspend fails.
First of all, let's fix logging: let's simply log the same message as we do on success, so that there's always the same pair of these messages around, regardless if the suspend was successful or not. To distuingish a successful suspend from a failed one, check the ERRNO= field of the structured message. In most ways a failed suspend cycle is not distuingishable from a successful one that took no time, hence let's treat it this way, and always pair the success message with a failure message. This also changes a more important concept: the post-suspend callouts are now called also called on failure, following the same logic: let's always run them in pairs: for every pre callout a post callout has to follow.
Diffstat (limited to 'src/sleep')
-rw-r--r--src/sleep/sleep.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
index eeaf8d8972..e3b72a768d 100644
--- a/src/sleep/sleep.c
+++ b/src/sleep/sleep.c
@@ -174,12 +174,15 @@ static int execute(char **modes, char **states) {
r = write_state(&f, states);
if (r < 0)
- return log_error_errno(r, "Failed to write /sys/power/state: %m");
-
- log_struct(LOG_INFO,
- "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR,
- LOG_MESSAGE("System resumed."),
- "SLEEP=%s", arg_verb);
+ log_struct_errno(LOG_ERR, r,
+ "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR,
+ LOG_MESSAGE("Failed to suspend system. System resumed again: %m"),
+ "SLEEP=%s", arg_verb);
+ else
+ log_struct(LOG_INFO,
+ "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR,
+ LOG_MESSAGE("System resumed."),
+ "SLEEP=%s", arg_verb);
arguments[1] = (char*) "post";
execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments, NULL);