break;
case JOB_RELOAD_OR_START:
- if (unit_active_state(j->unit) == UNIT_ACTIVE)
+ if (unit_active_state(j->unit) == UNIT_ACTIVE) {
+ j->type = JOB_RELOAD;
r = unit_reload(j->unit);
- else
+ } else {
+ j->type = JOB_START;
r = unit_start(j->unit);
+
+ if (r == -EBADR)
+ r = 0;
+ }
break;
case JOB_RESTART: {
else if (t == UNIT_ACTIVATING) {
j->type = JOB_START;
r = unit_start(j->unit);
- } else
+ } else {
+ j->type = JOB_RESTART;
r = unit_stop(j->unit);
+ }
break;
}
if ((j = manager_get_job(m, id))) {
if (r == -EALREADY)
r = job_finish_and_invalidate(j, JOB_DONE);
+ else if (r == -ENOEXEC)
+ r = job_finish_and_invalidate(j, JOB_SKIPPED);
else if (r == -EAGAIN)
j->state = JOB_WAITING;
else if (r < 0)
[JOB_CANCELED] = "canceled",
[JOB_TIMEOUT] = "timeout",
[JOB_FAILED] = "failed",
- [JOB_DEPENDENCY] = "dependency"
+ [JOB_DEPENDENCY] = "dependency",
+ [JOB_SKIPPED] = "skipped"
};
DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult);