diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2013-02-26 12:09:41 +0100 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2013-02-27 23:45:12 +0100 |
commit | 637f8b8eb5decb6dd626276ea9e3a545c895e086 (patch) | |
tree | 230228b3dbc1a84eb558b52913b94e3aef6ed049 | |
parent | a330b376bac697ecf13cada5f96070a318ab9ab9 (diff) |
core: keep track of the number of JOB_RUNNING jobs
-rw-r--r-- | src/core/job.c | 13 | ||||
-rw-r--r-- | src/core/manager.h | 2 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/core/job.c b/src/core/job.c index 990607f990..677a01d73d 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -206,6 +206,7 @@ Job* job_install(Job *j) { "Merged into running job, re-running: %s/%s as %u", uj->unit->id, job_type_to_string(uj->type), (unsigned) uj->id); uj->state = JOB_WAITING; + uj->manager->n_running_jobs--; return uj; } } @@ -483,7 +484,7 @@ static void job_change_type(Job *j, JobType newtype) { int job_run_and_invalidate(Job *j) { int r; uint32_t id; - Manager *m; + Manager *m = j->manager; assert(j); assert(j->installed); @@ -500,6 +501,7 @@ int job_run_and_invalidate(Job *j) { return -EAGAIN; j->state = JOB_RUNNING; + m->n_running_jobs++; job_add_to_dbus_queue(j); /* While we execute this operation the job might go away (for @@ -508,7 +510,6 @@ int job_run_and_invalidate(Job *j) { * store the id here, so that we can verify the job is still * valid. */ id = j->id; - m = j->manager; switch (j->type) { @@ -558,9 +559,10 @@ int job_run_and_invalidate(Job *j) { r = job_finish_and_invalidate(j, JOB_DONE, true); else if (r == -ENOEXEC) r = job_finish_and_invalidate(j, JOB_SKIPPED, true); - else if (r == -EAGAIN) + else if (r == -EAGAIN) { j->state = JOB_WAITING; - else if (r < 0) + m->n_running_jobs--; + } else if (r < 0) r = job_finish_and_invalidate(j, JOB_FAILED, true); } @@ -760,6 +762,9 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) { j->result = result; + if (j->state == JOB_RUNNING) + j->manager->n_running_jobs--; + log_debug_unit(u->id, "Job %s/%s finished, result=%s", u->id, job_type_to_string(t), job_result_to_string(result)); diff --git a/src/core/manager.h b/src/core/manager.h index cc4edf8f1e..0bd7a6d48b 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -225,6 +225,8 @@ struct Manager { unsigned n_installed_jobs; unsigned n_failed_jobs; + unsigned n_running_jobs; + /* Type=idle pipes */ int idle_pipe[2]; |