sleep: when we can't hibernate on suspend-then-hibernate, fall back to suspend again
authorLennart Poettering <lennart@poettering.net>
Wed, 24 Oct 2018 11:15:24 +0000 (13:15 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 24 Oct 2018 12:44:14 +0000 (14:44 +0200)
Let's make this a bit safer, and try hard to return to sleep, if we can
at all.

Fixes: #10212

src/sleep/sleep.c

index e3b72a7..a4eba59 100644 (file)
@@ -263,7 +263,17 @@ static int execute_s2h(usec_t hibernate_delay_sec) {
                 return 0;
 
         /* If woken up after alarm time, hibernate */
-        return execute(hibernate_modes, hibernate_states);
+        r = execute(hibernate_modes, hibernate_states);
+        if (r < 0) {
+                log_notice("Couldn't hibernate, will try to suspend again.");
+                r = execute(suspend_modes, suspend_states);
+                if (r < 0) {
+                        log_notice("Could neither hibernate nor suspend again, giving up.");
+                        return r;
+                }
+        }
+
+        return 0;
 }
 
 static int help(void) {