X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjob.c;h=c3b529e920fe44b3314c8dfb6ab921e4fd2c6394;hb=47342320a097523d93040cdd627e237a420572c5;hp=2b422b48773918235fee6e9f0a138099c9bc338b;hpb=faf919f1ebebdfc13f769bb6585e64e7ad4b301b;p=elogind.git diff --git a/src/job.c b/src/job.c index 2b422b487..c3b529e92 100644 --- a/src/job.c +++ b/src/job.c @@ -93,7 +93,7 @@ void job_free(Job *j) { free(j); } -JobDependency* job_dependency_new(Job *subject, Job *object, bool matters) { +JobDependency* job_dependency_new(Job *subject, Job *object, bool matters, bool conflicts) { JobDependency *l; assert(object); @@ -109,6 +109,7 @@ JobDependency* job_dependency_new(Job *subject, Job *object, bool matters) { l->subject = subject; l->object = object; l->matters = matters; + l->conflicts = conflicts; if (subject) LIST_PREPEND(JobDependency, subject, subject->subject_list, l); @@ -485,6 +486,8 @@ int job_finish_and_invalidate(Job *j, bool success) { j->state = JOB_WAITING; j->type = JOB_START; + + job_add_to_run_queue(j); return 0; } @@ -531,6 +534,14 @@ int job_finish_and_invalidate(Job *j, bool success) { 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_CONFLICTED_BY], i) + if (!other->meta.ignore_dependency_failure && + 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); } }