summaryrefslogtreecommitdiff
path: root/src/shutdown/shutdown.c
diff options
context:
space:
mode:
authorFranck Bui <fbui@suse.com>2021-09-06 08:47:08 +0200
committerFranck Bui <fbui@suse.com>2021-09-15 10:54:19 +0200
commit5bbf2db1e4eeabf2a36e28cf3aced0e87c4367d1 (patch)
treeaddab97808b23bd55e57ab4b11705abc0d65f65d /src/shutdown/shutdown.c
parent12663295ca7fbff951c6f9747daecadc593f4c93 (diff)
downloadsystemd-5bbf2db1e4eeabf2a36e28cf3aced0e87c4367d1.tar.gz
watchdog: make watchdog_ping() a NOP when the watchdog is disabled or closed
This patch allows watchdog_ping() to be used unconditionally regardless of whether watchdog_set_timeout() or watchdog_close() has been previously called or not and in both cases watchdog_ping() does nothing. shutdown.c has been updated to cope with this change.
Diffstat (limited to 'src/shutdown/shutdown.c')
-rw-r--r--src/shutdown/shutdown.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c
index 2ba1a21dae..a2ba96bf7c 100644
--- a/src/shutdown/shutdown.c
+++ b/src/shutdown/shutdown.c
@@ -308,9 +308,9 @@ static void bump_sysctl_printk_log_level(int min_level) {
}
int main(int argc, char *argv[]) {
- bool need_umount, need_swapoff, need_loop_detach, need_dm_detach, need_md_detach, in_container, use_watchdog = false, can_initrd;
+ bool need_umount, need_swapoff, need_loop_detach, need_dm_detach, need_md_detach, in_container, can_initrd;
_cleanup_free_ char *cgroup = NULL;
- char *arguments[3], *watchdog_device;
+ char *arguments[3], *watchdog_device, *watchdog_usec;
int cmd, r, umount_log_level = LOG_INFO;
static const char* const dirs[] = {SYSTEM_SHUTDOWN_PATH, NULL};
@@ -370,7 +370,6 @@ int main(int argc, char *argv[]) {
LOG_TARGET_KMSG))
bump_sysctl_printk_log_level(LOG_WARNING);
- use_watchdog = getenv("WATCHDOG_USEC");
watchdog_device = getenv("WATCHDOG_DEVICE");
if (watchdog_device) {
r = watchdog_set_device(watchdog_device);
@@ -379,6 +378,18 @@ int main(int argc, char *argv[]) {
watchdog_device);
}
+ watchdog_usec = getenv("WATCHDOG_USEC");
+ if (watchdog_usec) {
+ usec_t usec;
+
+ r = safe_atou64(watchdog_usec, &usec);
+ if (r < 0)
+ log_warning_errno(r, "Failed to parse watchdog timeout '%s', ignoring: %m",
+ watchdog_usec);
+ else
+ (void) watchdog_set_timeout(&usec);
+ }
+
/* Lock us into memory */
(void) mlockall(MCL_CURRENT|MCL_FUTURE);
@@ -409,8 +420,7 @@ int main(int argc, char *argv[]) {
for (;;) {
bool changed = false;
- if (use_watchdog)
- (void) watchdog_ping();
+ (void) watchdog_ping();
/* Let's trim the cgroup tree on each iteration so
that we leave an empty cgroup tree around, so that