summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/watchdog.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c
index 4445efb125..4c1a968718 100644
--- a/src/shared/watchdog.c
+++ b/src/shared/watchdog.c
@@ -318,9 +318,10 @@ static int open_watchdog(void) {
STRV_FOREACH(wd, try_order) {
watchdog_fd = open(*wd, O_WRONLY|O_CLOEXEC);
if (watchdog_fd >= 0) {
- r = free_and_strdup(&watchdog_device, *wd);
- if (r < 0)
- return log_oom_debug();
+ if (free_and_strdup(&watchdog_device, *wd) < 0) {
+ r = log_oom_debug();
+ goto close_and_fail;
+ }
break;
}
@@ -342,8 +343,12 @@ static int open_watchdog(void) {
r = update_timeout();
if (r < 0)
- watchdog_close(true);
+ goto close_and_fail;
+
+ return 0;
+close_and_fail:
+ watchdog_close(/* disarm= */ true);
return r;
}
@@ -356,7 +361,7 @@ int watchdog_set_device(const char *path) {
r = free_and_strdup(&watchdog_device, path);
if (r > 0) /* watchdog_device changed */
- watchdog_fd = safe_close(watchdog_fd);
+ watchdog_close(/* disarm= */ true);
return r;
}