chiark / gitweb /
manager: print warning on console before reboot
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 28 Oct 2014 03:14:23 +0000 (23:14 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 28 Oct 2014 03:17:49 +0000 (23:17 -0400)
It will be printed even if a prompt is blocking other messages.

src/core/failure-action.c
src/core/manager.c
src/core/manager.h

index 941747429f8b3468fa3f36f0fce5649d0d00cbd1..ce522a4e4fee33244a80004c8b333f39f1da1594 100644 (file)
 #include "special.h"
 #include "failure-action.h"
 
+static void log_and_status(Manager *m, const char *message) {
+        log_warning("%s", message);
+        manager_status_printf(m, STATUS_TYPE_EMERGENCY,
+                              ANSI_HIGHLIGHT_RED_ON " !!  " ANSI_HIGHLIGHT_OFF,
+                              "%s", message);
+}
+
 int failure_action(
                 Manager *m,
                 FailureAction action,
@@ -57,7 +64,7 @@ int failure_action(
         case FAILURE_ACTION_REBOOT: {
                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
 
-                log_warning("Rebooting as result of failure.");
+                log_and_status(m, "Rebooting as result of failure.");
 
                 update_reboot_param_file(reboot_arg);
                 r = manager_add_job_by_name(m, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE, true, &error, NULL);
@@ -68,13 +75,14 @@ int failure_action(
         }
 
         case FAILURE_ACTION_REBOOT_FORCE:
-                log_warning("Forcibly rebooting as result of failure.");
+                log_and_status(m, "Forcibly rebooting as result of failure.");
+
                 update_reboot_param_file(reboot_arg);
                 m->exit_code = MANAGER_REBOOT;
                 break;
 
         case FAILURE_ACTION_REBOOT_IMMEDIATE:
-                log_warning("Rebooting immediately as result of failure.");
+                log_and_status(m, "Rebooting immediately as result of failure.");
 
                 sync();
 
@@ -90,7 +98,7 @@ int failure_action(
         case FAILURE_ACTION_POWEROFF: {
                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
 
-                log_warning("Powering off as result of failure.");
+                log_and_status(m, "Powering off as result of failure.");
 
                 r = manager_add_job_by_name(m, JOB_START, SPECIAL_POWEROFF_TARGET, JOB_REPLACE, true, &error, NULL);
                 if (r < 0)
@@ -100,12 +108,12 @@ int failure_action(
         }
 
         case FAILURE_ACTION_POWEROFF_FORCE:
-                log_warning("Forcibly powering off as result of failure.");
+                log_and_status(m, "Forcibly powering off as result of failure.");
                 m->exit_code = MANAGER_POWEROFF;
                 break;
 
         case FAILURE_ACTION_POWEROFF_IMMEDIATE:
-                log_warning("Powering off immediately as result of failure.");
+                log_and_status(m, "Powering off immediately as result of failure.");
 
                 sync();
 
index 859631d3f6c6f2c1cb5da56f0a41d78ebbbdf564..d427d88d4e5a111495ab719da3c56d2800f8e7ea 100644 (file)
@@ -2944,7 +2944,7 @@ static bool manager_get_show_status(Manager *m, StatusType type) {
                 return false;
 
         /* If we cannot find out the status properly, just proceed. */
-        if (manager_check_ask_password(m) > 0)
+        if (type != STATUS_TYPE_EMERGENCY && manager_check_ask_password(m) > 0)
                 return false;
 
         if (m->show_status > 0)
index d0c0f58d0b32b358320d82cc8ec9fe13cc2e1d08..ab7254849c39306efed0113817259eadd71a56e5 100644 (file)
@@ -63,6 +63,7 @@ typedef enum ManagerExitCode {
 typedef enum StatusType {
         STATUS_TYPE_EPHEMERAL,
         STATUS_TYPE_NORMAL,
+        STATUS_TYPE_EMERGENCY,
 } StatusType;
 
 #include "unit.h"