X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjob.c;h=30a46bea8bfea54e112e64c7008b58ee425b475d;hb=26742b3fd8776c6c64e3c1035adc2599ddeb76d1;hp=0b6d321e991b74aafcad7b7a6110624777636e51;hpb=0ebd74d8d9ffc4ea47cc8fe8798466bdf4e6967f;p=elogind.git diff --git a/src/job.c b/src/job.c index 0b6d321e9..30a46bea8 100644 --- a/src/job.c +++ b/src/job.c @@ -385,6 +385,9 @@ int job_run_and_invalidate(Job *j) { case JOB_START: r = unit_start(j->unit); + + /* If this unit cannot be started, then simply + * wait */ if (r == -EBADR) r = 0; break; @@ -402,6 +405,11 @@ int job_run_and_invalidate(Job *j) { case JOB_STOP: r = unit_stop(j->unit); + + /* If this unit cannot stopped, then simply + * wait. */ + if (r == -EBADR) + r = 0; break; case JOB_RELOAD: @@ -500,35 +508,31 @@ int job_finish_and_invalidate(Job *j, bool success) { t == JOB_RELOAD_OR_START) { SET_FOREACH(other, u->meta.dependencies[UNIT_REQUIRED_BY], i) - if (!other->meta.ignore_dependency_failure && - other->meta.job && + if (other->meta.job && (other->meta.job->type == JOB_START || other->meta.job->type == JOB_VERIFY_ACTIVE || other->meta.job->type == JOB_RELOAD_OR_START)) job_finish_and_invalidate(other->meta.job, false); - SET_FOREACH(other, u->meta.dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i) - if (!other->meta.ignore_dependency_failure && - other->meta.job && - !other->meta.job->override && + SET_FOREACH(other, u->meta.dependencies[UNIT_BOUND_BY], i) + if (other->meta.job && (other->meta.job->type == JOB_START || other->meta.job->type == JOB_VERIFY_ACTIVE || other->meta.job->type == JOB_RELOAD_OR_START)) job_finish_and_invalidate(other->meta.job, false); - } else if (t == JOB_STOP) { - - SET_FOREACH(other, u->meta.dependencies[UNIT_CONFLICTS], i) - if (!other->meta.ignore_dependency_failure && - other->meta.job && + SET_FOREACH(other, u->meta.dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i) + if (other->meta.job && + !other->meta.job->override && (other->meta.job->type == JOB_START || other->meta.job->type == JOB_VERIFY_ACTIVE || other->meta.job->type == JOB_RELOAD_OR_START)) job_finish_and_invalidate(other->meta.job, false); + } else if (t == JOB_STOP) { + SET_FOREACH(other, u->meta.dependencies[UNIT_CONFLICTED_BY], i) - if (!other->meta.ignore_dependency_failure && - other->meta.job && + if (other->meta.job && (other->meta.job->type == JOB_START || other->meta.job->type == JOB_VERIFY_ACTIVE || other->meta.job->type == JOB_RELOAD_OR_START))