summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/service.c2
-rw-r--r--src/shared/exit-status.c7
-rw-r--r--src/shared/exit-status.h1
3 files changed, 9 insertions, 1 deletions
diff --git a/src/core/service.c b/src/core/service.c
index be88670bd8..0b19767d9e 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -335,7 +335,7 @@ static int service_verify(Service *s) {
return -EINVAL;
}
- if (s->type == SERVICE_ONESHOT && !(set_isempty(s->restart_force_status.signal) && set_isempty(s->restart_force_status.status))) {
+ if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status)) {
log_error_unit(UNIT(s)->id, "%s has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
return -EINVAL;
}
diff --git a/src/shared/exit-status.c b/src/shared/exit-status.c
index 942ac86128..f3434f7ccc 100644
--- a/src/shared/exit-status.c
+++ b/src/shared/exit-status.c
@@ -216,3 +216,10 @@ void exit_status_set_free(ExitStatusSet *x) {
set_free(x->signal);
x->status = x->signal = NULL;
}
+
+bool exit_status_set_is_empty(ExitStatusSet *x) {
+ if (!x)
+ return true;
+
+ return set_isempty(x->status) && set_isempty(x->signal);
+}
diff --git a/src/shared/exit-status.h b/src/shared/exit-status.h
index 744f2d5376..7438508e4d 100644
--- a/src/shared/exit-status.h
+++ b/src/shared/exit-status.h
@@ -97,3 +97,4 @@ bool is_clean_exit(int code, int status, ExitStatusSet *success_status);
bool is_clean_exit_lsb(int code, int status, ExitStatusSet *success_status);
void exit_status_set_free(ExitStatusSet *x);
+bool exit_status_set_is_empty(ExitStatusSet *x);