aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLudwig Nussel <ludwig.nussel@suse.de>2021-12-09 17:26:07 +0100
committerLudwig Nussel <ludwig.nussel@suse.de>2022-01-25 14:56:52 +0100
commit030f37c4083b1fba3eb445813e9e1d711563459a (patch)
tree247c26fadff82108c4b275f42f869a054230d678
parentlogind: enable wall messages by default (diff)
downloadsystemd-030f37c4083b1fba3eb445813e9e1d711563459a.tar.xz
systemd-030f37c4083b1fba3eb445813e9e1d711563459a.zip
logind: fix wall messages for direct shutdown calls
The wall mechanism uses the scheduled_shutdown_type to determine what message to send so it needs to be filled in also for the cases that call for shutdown without schedule. It's really a hackish way. The overall code needs refacturing.
-rw-r--r--src/login/logind-dbus.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index 41b48bcab1a..89285aee5b2 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -1957,6 +1957,8 @@ static int method_do_shutdown_or_sleep(
static int method_poweroff(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "poweroff");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_POWEROFF_TARGET,
@@ -1972,6 +1974,8 @@ static int method_poweroff(sd_bus_message *message, void *userdata, sd_bus_error
static int method_reboot(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "reboot");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_REBOOT_TARGET,
@@ -1987,6 +1991,8 @@ static int method_reboot(sd_bus_message *message, void *userdata, sd_bus_error *
static int method_halt(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "halt");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_HALT_TARGET,
@@ -2002,6 +2008,8 @@ static int method_halt(sd_bus_message *message, void *userdata, sd_bus_error *er
static int method_suspend(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "suspend");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_SUSPEND_TARGET,
@@ -2017,6 +2025,8 @@ static int method_suspend(sd_bus_message *message, void *userdata, sd_bus_error
static int method_hibernate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "hibernate");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_HIBERNATE_TARGET,
@@ -2032,6 +2042,8 @@ static int method_hibernate(sd_bus_message *message, void *userdata, sd_bus_erro
static int method_hybrid_sleep(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "hybrid-sleep");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_HYBRID_SLEEP_TARGET,
@@ -2047,6 +2059,8 @@ static int method_hybrid_sleep(sd_bus_message *message, void *userdata, sd_bus_e
static int method_suspend_then_hibernate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
Manager *m = userdata;
+ (void)free_and_strdup(&m->scheduled_shutdown_type, "sleep");
+
return method_do_shutdown_or_sleep(
m, message,
SPECIAL_SUSPEND_THEN_HIBERNATE_TARGET,