X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fjob.h;h=9119e4834a1ed2203d2e2191b4e724972d884a60;hb=340a1d2330ddc1dd18ad75bcdddf32f63c84b4a1;hp=b7ebd8dc88866b21855fb51994c2437565e96999;hpb=59fccdc587bc179c1638916ee16a24099f94f81f;p=elogind.git diff --git a/src/core/job.h b/src/core/job.h index b7ebd8dc8..9119e4834 100644 --- a/src/core/job.h +++ b/src/core/job.h @@ -22,8 +22,6 @@ ***/ #include -#include -#include typedef struct Job Job; typedef struct JobDependency JobDependency; @@ -49,9 +47,11 @@ enum JobType { _JOB_TYPE_MAX_MERGING, /* JOB_NOP can enter into a transaction, but as it won't pull in - * any dependencies, it won't have to merge with anything. - * job_install() avoids the problem of merging JOB_NOP too (it's - * special-cased, only merges with other JOB_NOPs). */ + * any dependencies and it uses the special 'nop_job' slot in Unit, + * it won't have to merge with anything (except possibly into another + * JOB_NOP, previously installed). JOB_NOP is special-cased in + * job_type_is_*() functions so that the transaction can be + * activated. */ JOB_NOP = _JOB_TYPE_MAX_MERGING, /* do nothing */ _JOB_TYPE_MAX_IN_TRANSACTION, @@ -94,20 +94,19 @@ enum JobMode { enum JobResult { JOB_DONE, /* Job completed successfully */ JOB_CANCELED, /* Job canceled by a conflicting job installation or by explicit cancel request */ - JOB_TIMEOUT, /* JobTimeout elapsed */ + JOB_TIMEOUT, /* Job timeout elapsed */ JOB_FAILED, /* Job failed */ JOB_DEPENDENCY, /* A required dependency job did not result in JOB_DONE */ JOB_SKIPPED, /* Negative result of JOB_VERIFY_ACTIVE */ JOB_INVALID, /* JOB_RELOAD of inactive unit */ JOB_ASSERT, /* Couldn't start a unit, because an assert didn't hold */ + JOB_UNSUPPORTED, /* Couldn't start a unit, because the unit type is not supported on the system */ _JOB_RESULT_MAX, _JOB_RESULT_INVALID = -1 }; #include "sd-event.h" -#include "manager.h" #include "unit.h" -#include "hashmap.h" #include "list.h" struct JobDependency { @@ -191,11 +190,15 @@ _pure_ static inline bool job_type_is_mergeable(JobType a, JobType b) { } _pure_ static inline bool job_type_is_conflicting(JobType a, JobType b) { - return !job_type_is_mergeable(a, b); + return a != JOB_NOP && b != JOB_NOP && !job_type_is_mergeable(a, b); } _pure_ static inline bool job_type_is_superset(JobType a, JobType b) { /* Checks whether operation a is a "superset" of b in its actions */ + if (b == JOB_NOP) + return true; + if (a == JOB_NOP) + return false; return a == job_type_lookup_merge(a, b); }