diff options
author | Ludwig Nussel <ludwig.nussel@suse.de> | 2021-12-09 17:26:07 +0100 |
---|---|---|
committer | Ludwig Nussel <ludwig.nussel@suse.de> | 2022-01-25 14:56:52 +0100 |
commit | 030f37c4083b1fba3eb445813e9e1d711563459a (patch) | |
tree | 247c26fadff82108c4b275f42f869a054230d678 /src/login | |
parent | cdf370626f08ed509a5dde9d5618eed29d625032 (diff) | |
download | systemd-030f37c4083b1fba3eb445813e9e1d711563459a.tar.gz |
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.
Diffstat (limited to 'src/login')
-rw-r--r-- | src/login/logind-dbus.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 41b48bcab1..89285aee5b 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, |