summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/job.c6
-rw-r--r--src/core/manager.c11
-rw-r--r--src/core/manager.h2
3 files changed, 12 insertions, 7 deletions
diff --git a/src/core/job.c b/src/core/job.c
index f3c76d66b5..5ea717eae1 100644
--- a/src/core/job.c
+++ b/src/core/job.c
@@ -71,8 +71,10 @@ void job_free(Job *j) {
j->installed = false;
}
- /* Detach from next 'smaller' objects */
- manager_transaction_unlink_job(j->manager, j, true);
+ assert(!j->transaction_prev);
+ assert(!j->transaction_next);
+ assert(!j->subject_list);
+ assert(!j->object_list);
if (j->in_run_queue)
LIST_REMOVE(Job, run_queue, j->manager->run_queue, j);
diff --git a/src/core/manager.c b/src/core/manager.c
index 95056296ad..aa918f1bd0 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -662,13 +662,15 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
return r;
}
+static void transaction_unlink_job(Manager *m, Job *j, bool delete_dependencies);
+
static void transaction_delete_job(Manager *m, Job *j, bool delete_dependencies) {
assert(m);
assert(j);
/* Deletes one job from the transaction */
- manager_transaction_unlink_job(m, j, delete_dependencies);
+ transaction_unlink_job(m, j, delete_dependencies);
if (!j->installed)
job_free(j);
@@ -710,8 +712,10 @@ static void transaction_abort(Manager *m) {
while ((j = hashmap_first(m->transaction_jobs)))
if (j->installed)
transaction_delete_job(m, j, true);
- else
+ else {
+ transaction_unlink_job(m, j, true);
job_free(j);
+ }
assert(hashmap_isempty(m->transaction_jobs));
@@ -1441,6 +1445,7 @@ static Job* transaction_add_one_job(Manager *m, JobType type, Unit *unit, bool o
LIST_PREPEND(Job, transaction, f, j);
if (hashmap_replace(m->transaction_jobs, unit, f) < 0) {
+ LIST_REMOVE(Job, transaction, f, j);
job_free(j);
return NULL;
}
@@ -1453,7 +1458,7 @@ static Job* transaction_add_one_job(Manager *m, JobType type, Unit *unit, bool o
return j;
}
-void manager_transaction_unlink_job(Manager *m, Job *j, bool delete_dependencies) {
+static void transaction_unlink_job(Manager *m, Job *j, bool delete_dependencies) {
assert(m);
assert(j);
diff --git a/src/core/manager.h b/src/core/manager.h
index 39e16aee98..0e9c0d7b4e 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -257,8 +257,6 @@ int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode
void manager_dump_units(Manager *s, FILE *f, const char *prefix);
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
-void manager_transaction_unlink_job(Manager *m, Job *j, bool delete_dependencies);
-
void manager_clear_jobs(Manager *m);
unsigned manager_dispatch_load_queue(Manager *m);