summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-04-06 02:39:16 +0200
committerLennart Poettering <lennart@poettering.net>2010-04-06 02:39:16 +0200
commit593fbdd21e52c8c0ac249c5b6163761005af8463 (patch)
treea1e3612fc7df9f5d392918db048473a479ed2617
parent101d8e630eab1281a0e126a78433cf6d5bed4cb4 (diff)
job: define job_type_is_redundant() to idenity unnecessary jobs
-rw-r--r--job.c39
-rw-r--r--job.h1
2 files changed, 40 insertions, 0 deletions
diff --git a/job.c b/job.c
index e2354af3fc..c4d2e7a11e 100644
--- a/job.c
+++ b/job.c
@@ -265,6 +265,45 @@ bool job_type_is_conflicting(JobType a, JobType b) {
return (a == JOB_STOP) != (b == JOB_STOP);
}
+bool job_type_is_redundant(JobType a, UnitActiveState b) {
+ switch (a) {
+
+ case JOB_START:
+ return
+ b == UNIT_ACTIVE ||
+ b == UNIT_ACTIVE_RELOADING;
+
+ case JOB_STOP:
+ return
+ b == UNIT_INACTIVE;
+
+ case JOB_VERIFY_ACTIVE:
+ return
+ b == UNIT_ACTIVE ||
+ b == UNIT_ACTIVE_RELOADING;
+
+ case JOB_RELOAD:
+ return
+ b == UNIT_ACTIVE_RELOADING;
+
+ case JOB_RELOAD_OR_START:
+ return
+ b == UNIT_ACTIVATING ||
+ b == UNIT_ACTIVE_RELOADING;
+
+ case JOB_RESTART:
+ return
+ b == UNIT_ACTIVATING;
+
+ case JOB_TRY_RESTART:
+ return
+ b == UNIT_ACTIVATING;
+
+ default:
+ assert_not_reached("Invalid job type");
+ }
+}
+
bool job_is_runnable(Job *j) {
Iterator i;
Unit *other;
diff --git a/job.h b/job.h
index bfe20339ec..5bea2948c7 100644
--- a/job.h
+++ b/job.h
@@ -126,6 +126,7 @@ int job_type_merge(JobType *a, JobType b);
bool job_type_is_mergeable(JobType a, JobType b);
bool job_type_is_superset(JobType a, JobType b);
bool job_type_is_conflicting(JobType a, JobType b);
+bool job_type_is_redundant(JobType a, UnitActiveState b);
bool job_is_runnable(Job *j);